This is an independent dynamical model, not a flattened 3D scene: instead of prescribing R(t) and T(t) as fixed sine/cosine curves, this simulator integrates a self-excited nonlinear oscillator — the same kind of "negative damping" equation used to model the κ-mechanism as a relaxation oscillator — and derives everything else from its emergent trajectory.
d²x/dt² − μω₀(1−x²)·dx/dt + ω₀²x = 0 (Van der Pol form)
When x is small, the −μ(1−x²) term acts as negative damping — energy is pumped in, exactly like the opacity "valve" that traps heat during compression. As |x| grows past 1, the term flips positive and removes energy, capping the growth. The system settles onto a stable limit cycle: a self-sustained pulsation that neither dies out nor blows up, with no oscillation prescribed by hand.
Period from mean density. The natural frequency ω₀ = 2π/P₀ still comes from the real period–mean-density relation (P·√ρ̄ ≈ const. ⇒ P₀ ≈ Q·√(R₀³/M)), but the actual oscillation period that emerges from the nonlinear equation can differ from P₀ by a few percent — more so at high μ, where the relaxation-oscillator character stretches the period, exactly as real Van der Pol systems do. Compare the "Measured period" readout to P₀ live.
Temperature: a real thermal lag, not a hard-coded quarter cycle. Adiabatic compression (Γ=5/3 ideal gas) sets an instantaneous target ΔT/T₀ ≈ −2·ΔR/R₀, but the photosphere can't respond instantly — heat has to diffuse out. That delay is modelled as a genuine first-order relaxation filter:
τ·dT_pert/dt = T_target − T_pert (τ = 3.5/ω₀)
A first-order lag filter driven at the pulsation frequency ω₀ has an analytic phase lag of arctan(ω₀τ) — with τ = 3.5/ω₀ this is a constant 74° regardless of mass, giving temperature a substantial delay behind radius without hand-picking "exactly 90°". The live "Measured T-vs-R phase lag" readout cross-checks the simulation's actual emergent lag against this analytic prediction — they should be close for gentle (low-μ) pulsation and drift apart as μ grows and the waveform becomes less sinusoidal.
Luminosity still follows the unavoidable Stefan–Boltzmann law self-consistently from the simulated R(t) and T(t): L/L₀ = (R/R₀)²·(T/T₀)⁴ — this part of the physics is identical in every correct treatment of a radiating sphere, 2D or 3D.
The phase-space plot (v = dx/dt against x) shows the pulsation as a closed loop rather than a time series: a near-circular loop at low μ, distorting into a pinched "relaxation" loop as μ increases — a view a rotating 3D star cannot show directly.