PulseCore

Chapter 4 · Section 11

Gas That Cools Keeps Its Spin

The BPT law

BPT Part 3.12 (Ripples, Spin, and the Whirling Disks), in its section Gas That Cools Keeps Its Spin: "Gas can shed its energy, by radiating it away. As it radiates it loses the random and inward motion that held it up, but it cannot radiate its angular momentum, so it falls inward while keeping its spin, turns faster as it shrinks, and settles where its spin holds it up: a rotating disk." The book gives the laws of each step. The Cooling Time, t⊹ = 3 · k_B · T / (2 · n · Λ), with Λ the cooling function; "where the cooling time is shorter than the free-fall time (Part 6.10), t⊹ < t⇓, gas collapses as fast as gravity can pull it". The Spin-Up by Contraction (G), Ω₂ · R₂² = Ω₁ · R₁²: "gas falling to a tenth of its radius turns a hundred times faster". The Disk Size, R⊘ = λ⟲ · R⊡ / √2, about a fortieth of the clump for λ⟲ ≈ 0.035; and the Disk Rotation, v⊚ = √(G · M / R). The free-fall time is BPT Part 6.10's, t⇓ = √(3π / (32 · G · ρ)). Ruling 2026-10-27: "we should definitely be seeing the whirling disks" (matter.js:119).

The established physics

Rees & Ostriker (1977), Silk (1977), White & Rees (1978): dense gas cools far faster than it falls. Free-fall time t⇓ = √(3π/(32Gρ)) (BPT Part 6.10).

The game's math

Matter.cool(dt, gk, wells) matter.js:128, called once a sub-step between the second kick of bodies and of wells (matter.js:404):

clouds:   CL × CL cells, CL = matter.cloud (8 on desktop, Part 4.15)
mean      = total matter / number of clouds
skip a body unless its cloud holds ≥ COOL_DENSITY · mean,  COOL_DENSITY = 2
f_g       = gas / m                                     its gas share (stars do not cool)
g         = its acceleration (accel(), undiluted)
ρ         = cloud mass / CL²
t⇓        = √(3π / (32·G·gk·ρ))
t⊹        = COOL_FRACTION · t⇓,  COOL_FRACTION = 0.03
u         = v − v̄_cloud                                 its motion against its cloud
u∥        = (u · g) / |g|                               along the pull
lose      = f_g · (1 − e^(−dt/t⊹))
v        ← v − lose · u∥ · ĝ

Only the motion along the pull is removed; the motion across it is kept. So matter falling toward anything ends up circling it. The first version (radial to each block's center over 0.3 t⇓) was measured not to make disks, since block centers are not where matter falls (matter.js:124–126).

Worked case: a cloud at three times the mean with t⇓ of 20 flips cools in t⊹ = 0.6 flips; over one quarter-flip sub-step lose = f_g·(1 − e^(−0.42)) ≈ 0.34 f_g: a pure-gas body loses a third of its fall speed each sub-step.

In the game

This law is why the player sees things turn. Matter falling into a clump loses its fall but not its sideways motion, so through the middle of the life the clumps along the filaments begin to swirl, and the heaviest settle into disks.

  • Clumps swirl. In 3D each body's points circle its center at the Kepler rate ω = √(G·gk·m/r³) for their place in it, inner points faster, in the sense of the body's own spin from its mergers (setMatter() scene3d.js:790–798). This turn is drawn: it shows the clump's spin, it is not the cooled matter's own orbit.
  • Disks. The 160 heaviest bodies of at least one cloud's mass each carry a spiral accretion-disk sprite, "warm arms winding in to a bright inner edge" (scene3d.js:943), lying on the skin, turning in the body's sense, sized by its mass, orange, and blue for a body bound as a planet (setBodyDisks() scene3d.js:989, placeBodyDisks() scene3d.js:1004).
  • Galaxies read their turn. When the player taps a well after the universe has returned to the Source, its banner describes the galaxy round it, including its share of ordered rotation, "… galaxy · … · κ_rot … · …" (galaxyOf() app.js:2963, text at app.js:3028; Chapter 6).

No control changes the cooling.

The scale model

The cloud is the same share of the universe on every device (Part 4.15). COOL_FRACTION is far longer than real cooling in dense cores, which a cell cannot resolve; it is the named choice.

Where the game and the theory differ

  • A fixed cooling time. BPT's Cooling Time follows the gas's temperature, density and metals through the cooling function Λ. Matter.cool() uses one fixed share of the free-fall time, t⊹ = 0.03 t⇓, for every cloud above twice the mean. The cooling function itself is in heat.js (Part 4.14), which decides how much of a galaxy's gas can form stars; the two are not tied together.
  • Only the motion along the pull is shed. BPT has cooling gas lose "the random and inward motion that held it up". The code removes only the part of a body's motion against its cloud that lies along the pull, so random motion across the pull is kept along with the spin.

Fixed numbers

Number Where What it is Kind
2 COOL_DENSITY matter.js:59 Clouds above twice the mean cool METHOD (named choice)
0.03 COOL_FRACTION matter.js:59 t⊹ = 0.03 t⇓ METHOD (named choice; Rees & Ostriker 1977 for t⊹ ≪ t⇓)
3π/32 matter.js:140 Free-fall time PHYSICS (BPT Part 6.10, Free-Fall Time)
8 matter.js:129 Default cloud side, cells METHOD (overridden by setCloud)
1 matter.js:129 Floor on clouds a side METHOD
10⁻¹² matter.js:139 Least pull for cooling METHOD