Chapter 3 · Section 11
The Data Around a Well: stepWells()
The BPT law
BPT Part 3.14 gives the Capture of the Data, "how fast a well takes in the collisionless Data Matter round it": Ṁ◍ = 16 · π · G² · M_w² · ρ◍ / (c² · v), with ρ◍ the density of Data Matter round the well and v its halo's speed. The book's note: it is "the capture cross-section of a black hole for slow particles, 16π(GM/c²)²(c/v)²," and "against the gas, which can lose its spin, it is millions of times slower, which is why the wells we weigh, data and all, come to about a thousandth of their stars." BPT's reading of the game (Part 3.14) splits the two layers: "A Proto Well, in the data layer, takes in the data that reaches it; from the physical layer a well takes in Data Matter by Capture of the Data, and the data streaming past it goes home through it uncounted in its mass." BPT Part 2.9 (the Data–Matter Equivalence) has the data turn with the disks, which is why the heaviest clusters of matter turn the data too, and BPT Part 3.10 (The Return to the Source) has the data a well draws in stream on home.
The established physics
A collisionless gas cannot shed its angular momentum. It reaches a horizon only on orbits that pass inside 4GM/(c·v), which gives the capture rate above (Shapiro & Teukolsky 1983, as the code names it). The rotation the wells give the data is the Kepler rate, Ω = √(GM/k³), plus a frame-dragging term (gravity.js, the gravity chapter).
The game's math
stepWells() app.js:818, every step of the universe:
-
Which wells act.
- Every physical source (sites as
swirlOnly). - Every Proto Well.
- From the Physical Nova on, the 24 heaviest bodies of 16 cells or more, as
swirlOnly(they turn the data and swallow none).
The data layer's accumulator map is cleared past 40,000 keys.
- Every physical source (sites as
- Reach by nearest neighbor (8.2). With more than 24 non-swirl wells, each well's reach is half the distance to its nearest neighbor, where the next well's pull takes over: reach = max(2, ⌈d_nn/2⌉). The nearest neighbor is found through bins of side S = max(2, ⌈2√(rows·cols/n)⌉), about two wells' spacing, searched outward ring by ring until the next ring cannot hold a nearer well, (ring − 1)·S > best (2026-10-29: it compared every pair each step). With 24 or fewer, the reach is the default.
WellDynamics.step()gravity.js:46–49 then takes each reach as the smaller of it and min(24, ⌊min(rows, cols)/4⌋) cells, thereachdefault of the class, sincenew WellDynamics({ G: 0 })app.js:2041 passes none. - Swirl and fall, in
WellDynamics.step()(gravity chapter), returning the cells each well absorbed. -
What is kept.
- Before the Physical Nova, a Proto Well takes in the data that reaches it: mass += n.
- From the Physical Nova on, a physical well's absorbed data is not added. It is counted in
ledger.dataThrough, streaming home. - Each non-site physical well instead takes in Data Matter at the capture rate:
ρ◍ = dark[block] / B² Data Matter per cell in the well's mesh block v = max(1e-6, w._vHalo || 10⁻³·c) the halo's speed (galaxies chapter) ΔM = 16π·(G·gk)²·M²·ρ◍ / (c²·v) per step; gk = a⁻³ (expansion)The Data Matter so captured is counted in
ledger.dataCaptured.
In the game
Between Harmonic 2 and Harmonic 3 this is the visible life of the Proto Wells: the data cells round each one wheel about it and fall in. With the drawer's color option on, "At Start the Pulsecore's data is painted as a colour wheel round its centre … so the spin, the flow and the wells' swirl show as moving colour" (index.php:214), and the player can watch each Proto Well's basin turn into a little vortex of color. The marks grow as their mass grows: the scene is told every 8 steps that a well has fed (app.js:867). The HUD Void line adds "· N into wells" once data has fallen in (ledger.funnel, app.js:2149). After the big bang the same swirl runs under the stars, round every well, site and heavy cluster; the data that falls into a physical well streams through it and is not added to its mass, and only the slow capture of Data Matter adds to it.
The scale model
The data layer is drawn cells. A drawn Proto Well's mass in cells grows by the drawn data it takes in. Data Matter is the drawn field's dark mass per block (darkField(), the dark-sector chapter). The capture uses the game's G, 𝒞→ and drawn masses, so it is the law at the model's scale.
Where the game and the theory differ
- In the physics the Kepler turn of a well reaches as far as its pull, falling off as √(GM/k³) with no edge. In the game a well turns and draws in the data only within its reach, which is never more than 24 cells or a quarter of the field (gravity.js:33, 46), whatever its mass.
- BPT Part 2.9 has every particle a swarm of data, so all matter turns the data. The game lets the 24 heaviest bodies of 16 cells or more do so (app.js:829); lighter bodies and the rest turn none.
Fixed numbers
| Number | Where | What it is | Kind |
|---|---|---|---|
| 16 | app.js:829 | least body mass that turns the data | CAP (a floor on which bodies act) |
| 24 | app.js:829 | heaviest bodies that turn the data | CAP (a fixed count) |
| 40,000 | app.js:831 | accumulator keys before clearing | METHOD (memory bound; the fractional turns restart) |
| 24 | app.js:838 | wells before the nearest-neighbor reach is used | METHOD (below it the default reach is cheap) |
| 2 | app.js:840 | least bin side | METHOD |
| 2 (in 2√(area/n)) | app.js:840 | bins about two spacings wide | METHOD |
| ½ | app.js:845 | reach = ⌈d/2⌉, halfway to the nearest well | METHOD (halfway is where the next well's pull takes over) |
| 2 | app.js:845 | least reach, in cells | CAP (a floor on reach) |
| 24 | WellDynamics gravity.js:33 |
default reach, in cells | CAP (caps every well's data reach; set by no law) |
| 1/4 | gravity.js:46 | reach ≤ a quarter of the field | CAP (geometry floor on the torus, still a fixed cut) |
| 16π | app.js:863 | capture coefficient | PHYSICS (Shapiro & Teukolsky 1983; BPT Part 3.14) |
| 1e-6, 10⁻³ | app.js:862 | halo speed floor and default, ×c | METHOD (guards when no galaxy has been read) |
| 8 | app.js:867 | steps between scene updates | DISPLAY |
Measured
- "400 wells reaching 64 rings each was most of a flip" (comment app.js:834–836, 8.2).
- "by the end of a level 25 life the wells weighed two thirds of their stars, against a thousandth in the sky, Mullaney et al. 2012" (comment app.js:853–854, 2026-10-28). This was why absorbed data stopped being added.