Point kinetics with six delayed-neutron precursor groups plus three lumped photoneutron groups (D₂O photodisintegration by fission-product γ — a defining feature of heavy-water reactors, it dominates the source term after a trip and limits how negative the reactor period can become):
dn/dt = (ρ−βtot)/Λ·n + ΣλiCi + ΣλpjCpj + S₀
dCi/dt = βin/Λ − λiCi
Integrated with a fully implicit (backward-Euler) scheme so the solution stays stable at high time acceleration. Λ = 0.90 ms — roughly 40× a PWR, because thermalisation in D₂O takes many more scattering collisions. This long generation time is why CANDU tolerates slow-acting liquid-zone control.
| βeff equilibrium fuel (≈50 % of fissions in Pu-239) | 4.8 mk |
| βeff fresh natural-U core | 5.9 mk |
| Prompt generation time Λ | 0.90 ms |
| λi (s⁻¹) | 0.0124 … 3.01 |
| Photoneutron fraction (lumped) | 0.5 mk |
Reactivity is reported in milli-k (1 mk = 10⁻³ Δk/k), Canadian convention. Prompt criticality is at ρ = βeff.
| Fuel temperature (Doppler), FTC | −0.0061 mk/°C |
| Coolant temperature, CTC | +0.033 mk/°C |
| Moderator temperature, MTC (equilibrium) | +0.005 mk/°C |
| Moderator temperature, MTC (fresh core) | +0.077 mk/°C |
| Full-core coolant void, CVR | +12 mk |
| Equilibrium ¹³⁵Xe load at 100 %FP | −28 mk |
The positive void coefficient is intrinsic to a lattice of natural-uranium fuel in separate pressure tubes: voiding the coolant hardens the in-channel spectrum and removes D₂O-coolant absorption, and the resulting increase in fast fission and resonance escape outweighs the loss of moderation (the bulk moderator is a separate, unvoided inventory). It is the reason CANDU carries two fast, independent, diverse shutdown systems. Drive the "imposed void (demo)" slider up and watch power run away against Doppler alone.
The MTC is the coefficient that swings hardest with burn-up: in a fresh natural-uranium core it is comfortably positive (+0.077 mk/°C), but as plutonium builds in and the lattice moves toward its equilibrium composition it collapses to a few thousandths of a mk per °C. The equilibrium fuel state therefore uses +0.005 mk/°C — a 40 K moderator excursion is worth only ~0.2 mk, which is why moderator temperature is an operational concern for the calandria and the reactivity-device calibration rather than for reactor control.
dI/dt = γIΣfφ − λII
dX/dt = γXΣfφ + λII − λXX − σaXXφ
γI=0.0639, γX=0.00237, T½(I)=6.57 h, T½(Xe)=9.14 h, σaX=2.65×10⁶ b, φ̄=9×10¹³ n·cm⁻²·s⁻¹. Because σφ ≫ λX, burn-out dominates at power, so after a trip xenon grows from the iodine inventory and peaks ≈9 h later — several times the equilibrium load. The 21 adjuster rods hold ≈15 mk in reserve, which buys roughly 30 minutes of poison-override before the reactor is guaranteed to stay shut down for ~40 h. Run the simulation at ×600 after a trip to see the poison-out curve.
Two-node fuel/coolant lump with 4.5 % of fission energy deposited directly in the moderator:
Mfcf·dTf/dt = 0.955·Pth − UAf(Tf−Tc)
Mccc·dTc/dt = UAf(Tf−Tc) − 2Ẇcp(Tc−Tin)
The steam generator is treated as a constant-temperature (boiling) sink, which
has the exact solution Tin = Tsat + (Tout−Tsat)e−NTU,
NTU = UASG/Ẇcp. UAf and UASG scale with flow0.6
and flow0.8. Decay heat uses three precursor groups summing to 6.7 % of
full power. Saturation line: Tsat = 179.9·p0.2381
(°C, MPa) — within 1 K over 1–10 MPa.
| Core flow / cp (D₂O, 300 °C, 10 MPa) | 7 700 kg/s · 5.7 kJ/kg·K |
| RIH / ROH temperature | 266 / 313 °C |
| Average fuel temperature at 100 %FP | ≈700 °C |
| Fuel thermal time constant | ≈7.6 s |
| Steam pressure / flow / hfg | 4.70 MPa · 1 069 kg/s · 1 617 kJ/kg |
| Gross cycle efficiency | 0.35 |
Note the reactor outlet at ~311 °C sits essentially on the 9.9 MPa saturation line — real CANDU channels run with a few per cent exit quality, so the model generates boiling void of its own. Reduce PHT flow, raise power or drop PHT pressure and the void — and hence reactivity — climbs.
Void is not switched on at a hard Tout = Tsat threshold. Subcooled nucleate boiling starts at the sheath while the bulk coolant is still a few K subcooled, and the void fraction saturates once the channel is well into quality, so the model uses a C¹ (smooth-derivative) curve in the bulk subcooling Δsub = Tsat − Tout:
drive = k·ln(1 + e−Δsub/k)
αvoid = αmax·(1 − e−drive/s)
with k = 2.5 K (the subcooled-boiling band), s = 45 K and αmax = 0.45.
The softplus reproduces max(0, −Δsub) without the kink, so
dα/dT rises continuously from ≈0 when the channel is 10 K subcooled to
≈0.006 K⁻¹ at saturation — worth about 0.07 mk/K of positive feedback at the
operating point. The "ROH subcooling" meter shows Δsub directly: watch it
go negative as you throttle the pumps, and watch the void reactivity bar follow it
smoothly rather than snapping on.
RRS computes a demanded net reactivity ρdem = Kpe − Kdṅ
(clamped to ±0.4 mk), subtracts every other reactivity component, and solves for the
required zone-controller fill, rate-limited to 1.2 %/s. If the zones saturate
(<15 % or >85 %) the adjuster bank is driven, exactly as the real regulating
program does. SDS-1: 28 spring-assisted shutoff rods, −80 mk, 0.3 s delay then
1.4 s insertion, S-shaped worth curve. SDS-2: gadolinium nitrate injection, −300 mk
in ~2 s. Trips modelled: neutron overpower 120 %FP, log-rate +10 %/s, high PHT
pressure 10.5 MPa, low PHT flow 70 %, high moderator temperature 90 °C, manual.
The turbine governor holds SG pressure; on a turbine trip the condenser steam
discharge valves take up to 70 % steam flow so the reactor can stay at power.
Each preset resets the plant and then plays timed steps against the simulation clock, driving the same sliders and buttons an operator would — so you can take over mid-script at any time (or hit stop script). Narration lands in the event log; the time acceleration is stepped automatically so the interesting parts are not spent waiting.