PulseCore

Chapter 3 · Section 7

Proto Wells Become Sites, and How a Site Fills

The BPT law

BPT Part 3.14 (Proto Wells: Where Wells Will Form) opens from observation: "No black hole has ever been seen to form except by collapse … So a Proto Well is not a well." At the Physical Nova a Proto Well "becomes a site: where the gas will gather, where the first stars will light, and where a well will be born. It is the data's prediction of where the wells of matter will form." A well is born at a site in one of two ways.

  • By direct collapse, early. A site makes its well at once when three things hold together: it is deep enough that infalling gas reaches T_vir ≥ 10⁴ K, "a circular speed of about 17 km/s"; its gas is pristine, "its metals below about 10⁻⁵ of the Sun's"; and "a neighbour already shines." The gas then holds near 8,000 K at the Sound Speed of Warm Gas, c_s = √(k_B · T / (μ · m_p)), about 7.4 km/s, and falls in at the Collapse Inflow Rate, Ṁ_in = 0.975 · c_s³ / G, with c_s "in a deeper site the site's v_c / √2". "Above about 0.04 Suns a year the gas arrives faster than a protostar can contract, and it swells into a supermassive star instead." Its well is the Direct Collapse Seed, M_dc = Ṁin · t★, with t_★ "a million years or two", "never more than the site's gas can give."
  • By its first dying star. "Everywhere else … its well is born when its first heavy star dies and the remnant sinks to its heart," and "many never fill."

The prediction is scored by the Site Lift, Λ_s = N_in / (N_w · A_s): wells born within a site's core (the radius holding half its matter) against all wells born and the share of the surface within the cores; "1 is chance." BPT's reading of the game (Part 3.14) adds that a site "pulls and gathers its galaxy but is no well: it is not counted, drawn, ranked or shining, and it swallows nothing," that a direct-collapse heart is "M_dc, never more than a tenth of its gas," and that a clump collapsing whole within it makes the heart, "held to the Direct Collapse Seed."

The established physics

As BPT Part 3.14 cites them, and as the code names them:

  • Shu 1977 (the inflow of an isothermal sphere, 0.975 c_s³/G).
  • Omukai, Schneider & Haiman 2008 (the metal line).
  • Shang, Bryan & Haiman 2010, and Visbal, Haiman & Bryan 2014 (a lit neighbor; the code's comment at app.js:1467 names Visbal, Haiman & Bryan 2014).
  • Hosokawa et al. 2013 (the 0.04 Suns a year line).
  • Woods et al. 2019 (review).
  • Madau & Rees 2001 (remnant seeds).
  • Bardeen, Bond, Kaiser & Szalay 1986 (peaks predict halos).

The game's math

Making a site. promoteDataWells(frame) app.js:1378 runs failProtoWells, groups the surviving Proto Wells by birth group, passes each group to addPhysicalWells(…, from = group) (which carries each record on under a new W id), then calls makeSite(id) app.js:1417 on each new source. makeSite sets w.site = true, removes one wellWeight() from wellsStand and one from wellsSeen, marks the record's kind as 'site', and opens a siteStats entry.

A site in the physics.

  • No horizon. Matter.horizon(w) matter.js:318 returns 0 for a site, so nothing falls in.
  • No light. measureFeeding sets edd = 0 for it.
  • No capture of data. stepWells skips sites for Data Matter capture (app.js:860), and marks them swirlOnly in the data-layer step (app.js:823), so a site turns the data around it and swallows none.
  • Grid mass. A site is deposited onto the gravity grid by cloud-in-cell weights (matter.js:246–248) and pulls only through the grid (Part 3.12). The halo's own size is haloRadius() app.js:1409: the distance holding 0.9 of its galaxy's matter (siteR) and 0.5 (siteCore), at least SITE_R_MIN = 1 cell. Both are set at each galaxy reading (app.js:3107).

Direct collapse. testDirectCollapse(top, gs) app.js:1465, at each galaxy reading, for each waiting site with a galaxy:

Z      = Σ metals / Σ gas  (mass fractions)
c_s    = max(7.4 km/s, v_c / √2)
Ṁ_in   = 0.975 · (c_s·10³)³ / 6.674×10⁻¹¹ / 6.3×10²²     Suns a year (kg/s ÷ 6.3×10²²)
x      = Ṁ_in / 0.04
fill if  T_vir ≥ 10⁴ K  and  Z < 10⁻⁵ · 0.019  and  a lit neighbor within siteR
         and  no living stars  and  x ≥ 1  and  gas > 0
seed   = min(Ṁ_in · 1.5×10⁶ yr,  0.1 · gas · kR)          in Suns; kR = realPerCell()

The seed's drawn mass, seed/kR, is taken from the bodies' gas in proportion. Then fillSite(site, 'direct', …). The figure 6.3 × 10²² converts kg/s to Suns a year: 1.989 × 10³⁰ kg ÷ 3.156 × 10⁷ s.

Remnant and clump.

  • A Stellar Null Well born within a waiting site's siteR fills it as a 'remnant' (stepMatterPost, app.js:681–682).
  • A collapse well (Part 3.8) does the same as a 'clump' (app.js:693). A clump's own mass is held to the Direct Collapse Seed by siteSeedCap() app.js:1431, the same seed law (2026-10-29: "a level 182 heart was born at 2e16 Suns").
  • A well meeting a site in mergeWells goes through siteMeets() app.js:1454. Two sites merge as one site. A heart takes in a site's halo. Any other well fills the site.

fillSite() app.js:1437 turns the site into a heart. It records ownSuns, the heart's own mass in Suns, which feeds the galaxies chapter, adds the drawn mass, removes the well that filled it (as a merger), and counts a new well (wellsStand += 1) only for direct collapse. A remnant or a clump was already counted when it was born.

Site Lift. scoreBirth() app.js:1483 marks each well born after the Physical Nova as inside a site's core or not. sampleSites() app.js:1489 measures the share of the surface inside the sites' cores, A_s, on a 96 × 96 grid of points, binned by the widest core. The lift is (inside/born)/mean A_s (siteRecord() app.js:1502). A site that never fills is dropped at the decay: "its site never filled: it returned to the Source" (app.js:2640).

In the game

From Harmonic 3 on, the magenta rings are gone: a site has no mark of its own (wellList() app.js:1315 passes only realWells(), never sites, to the scene). What the player sees instead is what a site does. The stars that condense after the big bang gather round the sites into galaxies, and in 3D each star turns on its own orbit about the galaxy's center, so the disks shear and the spirals wind (scene3d.js:518–523). The HUD well line ends "· N sites waiting" while sites wait for their wells (app.js:2141). When a site fills, a heart appears at the galaxy's center: a solid black sphere, a third of a free well's mark with a faint ring, since a horizon is tiny next to its galaxy (scene3d.js:1472–1476), and a Seyfert's warm glow or a quasar's white glow and twin jets once it feeds past an Eddington ratio of 0.01 or 0.1 (scene3d.js:1540–1550). In a deep universe the hearts born light blaze as quasars while they catch up with their galaxies. The run's record carries the Site Lift and each site's tests and how and when its well was born (siteRecord()); a dive card names a heart's galaxy (Part 3.15).

The scale model

A drawn site stands for wellMult true sites, but the weight is removed from wellsStand because a site is no well. A heart's own mass is counted in true Suns (ownSuns), each drawn cell of matter standing for realPerCell() = starMult / stars.sun Suns. Its drawn mass is in cells.

Fixed numbers

Number Where What it is Kind
10⁴ K SITE_TVIR app.js:1401 least virial temperature PHYSICS (atomic-hydrogen cooling; BPT Part 3.14)
10⁻⁵ SITE_ZMAX app.js:1401 metal line, solar units PHYSICS (Omukai, Schneider & Haiman 2008, via BPT Part 3.14)
0.019 SITE_ZMAX app.js:1401, 1471 the Sun's metal mass fraction PHYSICS (a standard solar value; the code names no source)
0.04 SITE_MCRIT app.js:1401 inflow line, Suns a year PHYSICS (Hosokawa et al. 2013, via BPT Part 3.14)
1.5 × 10⁶ yr SITE_TSTAR app.js:1401 supermassive star's life PHYSICS (BPT Part 3.14: "a million years or two")
0.1 SITE_SEED_GAS app.js:1401 seed never above a tenth of the gas CAP (BPT's law says "never more than the site's gas can give"; its reading of the game names a tenth, which no law sets)
7.4 km/s SITE_CS_WARM app.js:1401 sound speed at 8,000 K PHYSICS (Sound Speed of Warm Gas, BPT Part 3.14, μ ≈ 1.2)
0.975 app.js:1433, 1471 Shu's inflow coefficient PHYSICS (Shu 1977)
√2 app.js:1433, 1471 c_s from v_c in a deeper site PHYSICS (isothermal sphere v_c = √2 c_s; BPT Part 3.14)
10³ app.js:1433, 1471 km/s to m/s PHYSICS (units)
6.674 × 10⁻¹¹ app.js:1433, 1471 G in SI PHYSICS (CODATA)
6.3 × 10²² app.js:1433, 1471 kg/s per Sun a year PHYSICS (units: M☉ / yr)
1 x ≥ 1 app.js:1475 at or above the inflow line PHYSICS (the line itself)
1 cell SITE_R_MIN app.js:1407 least site size CAP (a floor on a reach; the grid's resolution)
0.9, 0.5 haloRadius() app.js:1409, 3107 halo and core as matter shares METHOD (definitions of halo and core reach)
96 sampleSites() app.js:1492 surface sample grid, 96 × 96 METHOD (a Monte Carlo of the area share)
1, 3 × 3 app.js:1494, 1497 bin floor and neighbor bins METHOD (spatial hashing)
200 app.js:1500 filled-share curve points kept RECORD
400 siteRecord() app.js:1506 sites written to the record RECORD
4 siteRecord() rounding decimals of shares RECORD
1e-15 app.js:1477 gas left to take, zero test METHOD (round-off)