Repository navigation
Reactor Physics
Note
Design stage. This page describes planned mechanics from the design document. Not implemented yet — see Roadmap (milestone M1 for the headless simulation core; M4 for the T0 pile in the world, M5 for thermal hydraulics with Create, M9 for the T2a reactor with xenon and samarium).
The reactor in Prompt Critical is not a block with a fuel slot and an output rate. It is a multiblock whose behavior is computed from real equations: point kinetics with six groups of delayed neutrons, a lattice model that derives criticality from what you built, temperature and void feedbacks, xenon and samarium poisoning, decay heat by the ANS-5.1 standard, and thermal hydraulics with boiling and the boiling crisis.
Two consequences matter for the player:
- There are no "reactor types" in the code. The core computes physics from the lattice composition (fuel, moderator, coolant, absorbers) and geometry. A graphite pile, an RBMK-like channel reactor and a PWR are all emergent results of what you assemble. The "typical values" in this page are test oracles the model must reproduce, not inputs.
- The plant is read through instruments. Protection and control act on sensor readings with error, noise and lag, not on hidden "true" values.

| Subsystem | Domain | Rate |
|---|---|---|
Primary/secondary loop hydraulics (FluidNetwork) |
FAST | 20 Hz + adaptive substeps |
Heat conduction in fuel rods and walls (HeatStructure) |
FAST | 20 Hz |
Point kinetics (PointKinetics) |
FAST | 20 Hz + substeps when ρ > 0.5β |
Nodal flux shape (LatticeModel → NodalFluxSolver) |
FAST, event-driven | 1 Hz + on structural change |
Reactivity balance (ReactivityBudget) |
FAST | 20 Hz |
Hardware protection (ProtectionSystem) |
FAST | 20 Hz |
Xe/Sm poisoning (PoisonTracker) |
SLOW | 1 Hz, K_slow = 72
|
Decay heat (DecayHeat) |
SLOW accumulation / FAST power | 1 Hz / 20 Hz |
Burnup and nuclides (NuclideInventory) |
SLOW | 1 Hz |
Every state field has exactly one writer per tick, so a step is deterministic and reproducible (important for replays and tests). See Overview-and-Design-Pillars for the FAST/SLOW/STORAGE domains.
A naive "per-pipe-block" simulation hits the acoustic Courant limit: the speed of sound in water at 300 °C and 15.5 MPa is about 1000 m/s, so with 1 m blocks an explicit step must be ≤ 1 ms — 50 substeps per tick for every pipe block, about 4 ms/tick for 400 elements. That is twice the whole mod budget.
The mod uses a lumped-element model (LEM) instead:
-
Graph contraction. Runs of pipe without branches, heat sources or valves collapse into one
FlowLinkwith summed inertia, resistance and head. A typical network of 100 blocks contracts to 8–20 nodes. - Semi-implicit pressure solution. Pressure is solved implicitly, which removes the acoustic limit. Only the material Courant condition remains (mass residence time in a node), which is almost always met at Δt = 0.05 s.
| Element | Integrated state | Derived values |
|---|---|---|
FluidNode |
mass M [kg], internal energy U [J]; two-region nodes track liquid and vapor separately | P, T, density, enthalpy, quality x, void fraction α, level |
FlowLink |
mass flow ṁ [kg/s] | velocity, Re, losses, critical flow, regime |
HeatStructure |
radial node temperatures [K] | surface heat fluxes, peak temperature, DNBR |
PumpModel (part of a link) |
shaft angular speed ω [rad/s] | head, torque, shaft power |
Mass and internal energy are the conserved unknowns, so mass and energy are conserved exactly. With a (P, h) formulation, a closed loop would slowly lose mass to numerical drift and the pressurizer would "empty" for no reason.
Other parts of the hydraulic model: two-phase pressure drop, phase separation in nodes, homologous pump curves with flywheel coastdown, choked (critical) flow for breaks, and boron as a passive scalar carried with the water.
Water and steam properties follow IAPWS-IF97 (2012 revision), with IAPWS 2008 viscosity, IAPWS 2011 thermal conductivity and IAPWS 2014 surface tension. The direct IF97 formulas are too expensive for the hot loop, so the build generates precomputed tables (Gradle task :pc-sim:generateWaterTables) shipped as data/promptcritical/physics/if97_tables.bin with a checksum.
Table range: P from 611.2 Pa to 25 MPa, h from 0 to 6.0 MJ/kg (up to ≈ 1800 K at low pressure, needed for steam over an uncovered core during LOCA). Values outside the range are clamped with an OUT_OF_RANGE flag.
Other fluids (hydrocarbons, gas mixtures) plug into the same FluidNetwork through the FluidPackage interface. A node carries exactly one fluid package; mixing packages in one node is rejected by the network validator.
For every heated surface the model selects a regime from the boiling curve:
| Regime | Condition | Correlation |
|---|---|---|
SINGLE_PHASE_LIQUID |
wall below onset of boiling | Dittus–Boelter (×1.32 Weisman bundle factor for a triangular rod lattice); natural convection floor when pumps are stopped |
NUCLEATE_BOILING |
wall above saturation, heat flux below CHF | Chen (1966); Cooper (1984) for pool boiling in steam generators and pools |
TRANSITION_BOILING |
CHF exceeded, wall below minimum film boiling temperature | interpolation |
FILM_BOILING |
wall above minimum film boiling temperature | Bromley / Dougall–Rohsenow + radiation |
SINGLE_PHASE_VAPOR |
dried-out node (α ≥ 0.999) | Dittus–Boelter for steam + radiation |
CONDENSATION |
wall below saturation, steam node | Nusselt film condensation, degraded by non-condensable gases |
Once a surface passes CHF it stays in transition/film boiling until the wall cools below the minimum film boiling temperature (rewetting). Without this hysteresis the regime would flicker every tick, and reflooding during LOCA would be wrong.
Critical heat flux (CHF) uses a hierarchy:
- W-3 correlation (Tong, 1967) inside its validity range (6.9–15.9 MPa, 1356–6800 kg/(m²·s), quality −0.15…+0.15).
-
Groeneveld 2006 CHF look-up table outside the W-3 range (0.1–21 MPa, 0–8000 kg/(m²·s)), shipped as
chf_lut_2006.bin. - Zuber pool boiling at very low mass flux (pools, stopped pumps): 1.11 MW/m² at 0.1 MPa, 3.96 MW/m² at 7 MPa.
Blending between regions avoids jumps that a player would read as an instrument bug.
DNBR (departure from nucleate boiling ratio) is the ratio of CHF to local heat flux; MDNBR is its minimum along the hot channel. Each fuel column is checked at 8 axial points, every second tick (10 Hz). The design limit is MDNBR ≥ 1.30. The actual crisis in the model happens at DNBR ≤ ξ, where ξ is a per-assembly uncertainty multiplier drawn from a lognormal distribution (median 1.0, σ_ln = 0.08), seeded by the fuel assembly UUID. So the crisis is probabilistic around 1.0–1.15 but reproducible for a given assembly.
UO₂ thermal conductivity follows Fink (2000) with a burnup correction and porosity. Conductivity falls from 5.14 W/(m·K) at 600 K to 2.06 at 2000 K, then rises again (electronic contribution — important for reactivity-initiated accidents). UO₂ melts at 3120 ± 30 K with 259 kJ/kg latent heat; melting is modeled with an enthalpy method, and the melt fraction feeds the Accidents models. The rod model covers pellet, gap and cladding, plus the steam generator and condenser.
The normalized fission power n(t) and the delayed neutron precursor concentrations cᵢ follow the point kinetics equations:
- ρ — total reactivity from
ReactivityBudget; - β_eff — effective delayed neutron fraction;
- Λ — prompt neutron generation time (computed from the lattice, not set);
- λᵢ — precursor decay constants;
- s — external neutron source.
G = 6 Keepin groups for fission, plus up to 3 photoneutron groups when D₂O or beryllium is present (up to 9 groups). Thermal power is
Delayed neutron data (Keepin, 1965):
| Group | U-235 λ, s⁻¹ | U-235 fraction | Pu-239 λ, s⁻¹ | Pu-239 fraction |
|---|---|---|---|---|
| 1 | 0.0124 | 0.033 | 0.0128 | 0.035 |
| 2 | 0.0305 | 0.219 | 0.0301 | 0.298 |
| 3 | 0.111 | 0.196 | 0.124 | 0.211 |
| 4 | 0.301 | 0.395 | 0.325 | 0.326 |
| 5 | 1.14 | 0.115 | 1.12 | 0.086 |
| 6 | 3.01 | 0.042 | 2.69 | 0.044 |
| β | 0.0065 | 0.0021 |
U-238 (fast fission, β = 0.0148) and Pu-241 (β = 0.0054) are included too. The groups are mixed by the actual fission fractions from the nuclide inventory, so β_eff falls as plutonium builds up:
| State | β_eff |
|---|---|
| VVER, fresh fuel | ≈ 0.0068 |
| VVER, end of cycle (~40 MW·d/kg) | ≈ 0.0052 |
| 100 % MOX | ≈ 0.0039 |
| T0, natural uranium metal | ≈ 0.0067 |
The same +300 pcm that gives a 7.9 s period at beginning of cycle gives 3.8 s at end of cycle and 1.2 s in a MOX core.
The stable period after a reactivity step follows the inhour equation. The table shows why graphite reactors are more forgiving:
| ρ, pcm | 10 | 50 | 100 | 200 | 300 | 500 | 650 (= β) | 1000 |
|---|---|---|---|---|---|---|---|---|
| Period, s (Λ = 2·10⁻⁵ s, LWR) | 813 | 137 | 54.9 | 17.3 | 7.08 | 1.19 | 0.093 | 0.0057 |
| Period, s (Λ = 10⁻³ s, graphite) | 823 | 139 | 56.3 | 18.3 | 7.87 | 1.96 | 0.83 | 0.25 |
The period shown on instruments is measured the way a real control panel does it: from the filtered flux over a 1 s window. Values above 1000 s are shown as ∞. This goes to tag core.period and the SHORT_PERIOD trip channel.
Prompt jump: a fast reactivity change ρ < β changes power almost instantly by a factor β/(β−ρ), then power follows the period. On a scram (ρ = −10β) power drops within about 1 s to ≈ 9 %, then decays with a period approaching −80 s, set by the longest-lived precursor group. That is the physical limit of how fast a reactor can be shut down, and it is visible on the log-scale power meter.
Prompt criticality (ρ ≥ β, "one dollar"): the reactor is critical on prompt neutrons alone, the period is milliseconds for a light-water reactor, and rods are useless. Only negative feedback (Doppler) limits the burst (Fuchs–Hansen model). For the PR-300 reference reactor at ρ = 1.2β the burst is about 470 MJ, peak power ≈ 8 GW (27× nominal), width ≈ 52 ms. In game, prompt criticality is always an accident: a PromptCriticalEvent goes to acoustics, accident consequences and the CC: Tweaked pc_reactor peripheral.
With a neutron source in a subcritical core, multiplication is M = 1/(1−k_eff). Detector count rate is proportional to M, so 1/M falls almost linearly to zero as you approach criticality. This is the classic inverse multiplication (1/M) method used to bring a T0 pile critical layer by layer, as on CP-1 in 1942.
| Neutron source | Strength |
|---|---|
| Spontaneous fission of U-238 | 13.6 n/(s·kg U-238) |
| Spontaneous fission of Pu-240 | 1.0·10⁶ n/(s·kg) |
| Spontaneous fission of Cm-244 (spent fuel) | 1.1·10¹⁰ n/(s·kg) |
Am-Be startup source (item startup_source) |
2.2·10⁶ n/(s·Ci) Am-241 |
| D₂O and Be photoneutrons | proportional to fission product gamma activity after shutdown |
Example: 40 t of natural uranium at ρ = −1000 pcm produces 2.2·10⁷ fissions/s, about 0.7 mW. Detectors count it; thermometers do not. That is why a startup source and a sensitive fission chamber are needed.
Every block inside a validated reactor multiblock (assembled by reactor_controller) is a 1 m³ neutron node with a composition: fuel and its geometry, cladding, coolant (with density from the hydraulics and boron in ppm), separate moderator, absorber rod segments, or reflector.
Reference lattices (design parameters, not tuning constants):
| Lattice | Geometry | Fuel | Pitch | Volume fractions: fuel / clad / coolant / moderator |
|---|---|---|---|---|
T0_SLUG |
Ø28 mm metal slugs in Al cladding, air channels 44×44 mm | natural U metal | 203 mm | 0.015 / 0.002 / 0.030 (air) / 0.953 (graphite) |
T1_CLUSTER |
18 rods Ø13.6 mm in a Zr-Nb tube Ø88×4 mm | UO₂ 2.0 % | 250 mm | 0.030 / 0.029 / 0.035 / 0.84 (graphite) |
T2_HEX |
triangular lattice of Ø9.1 mm rods | UO₂ 3–5 % | 12.75 mm; 6000 rods/m² | 0.27 / 0.11 / 0.62 (H₂O, also moderator) / 0 |
T3_CLUSTER_D2O |
37 rods Ø13.1 mm in a Zr-Nb tube | natural UO₂ | 286 mm | 0.053 / 0.045 / 0.037 (D₂O) / 0.83 (D₂O) |
The infinite-lattice multiplication factor uses the four-factor formula, and leakage comes from the geometric buckling of the assembled core:
Cross sections come from ENDF/B-VII.1 (2200 m/s values with Westcott corrections). A 1.5-group nodal diffusion model computes the power distribution and peaking factors at 1 Hz and on structural change; point kinetics is coupled to it quasi-statically.
ReactivityBudget keeps each component separately (all in Δk/k; pcm and dollars on the HMI):
| Component | Source | Domain |
|---|---|---|
STATIC |
nodal reactivity at the last SLOW step (burnup, Xe, Sm, boron, rods, geometry) | SLOW |
RODS |
rod movement since the last SLOW step | FAST |
DOPPLER |
fuel temperature | FAST |
MODERATOR_TEMP |
separate moderator temperature (graphite, D₂O) | FAST |
COOLANT_DENSITY |
coolant density (temperature and void effect) | FAST |
BORON |
boron concentration | FAST |
XENON, SAMARIUM
|
display only (part of STATIC) | SLOW |
EXTERNAL |
tests only | FAST |
-
Doppler coefficient — always negative, proportional to 1/√T, effectively instantaneous (only the pellet heat-up time, 3–6 s for UO₂). About −3.8 pcm/K for
T2_HEXat 900 K. It is the main protection against a prompt-neutron excursion. -
Moderator temperature and void coefficients in light-water reactors — LWRs are under-moderated, so lower water density means lower k: negative MTC and void coefficient. Boron weakens this; at high boron (> ~1500 ppm) and low temperature the MTC can turn positive. Prototype
T2_HEX: MTC −55 pcm/K at 0 ppm, −35 pcm/K at 1000 ppm; boron worth −7.4 pcm/ppm. -
Void coefficient in channel reactors (T1, T3) — removing water from a channel reduces absorption while the graphite moderator stays, so the void coefficient is positive: about +31 pcm per % void for
T1_CLUSTER, similar to an RBMK-1000 before modernization. This is the main lesson of T1: when flow drops and steam increases, power rises by itself. -
Power coefficient — computed for the HMI from recent data. In T1 at low power the void contribution per MW is large and Doppler is small, so the power coefficient changes sign below about 20–30 % power (tag
core.reactivity.power_coef, warning on the HMI).
Typical values by tier (test oracles):
| Tier | k∞ (fresh, no Xe) | Doppler, pcm/K | Moderator/coolant, pcm/K | Void, pcm/% | Boron, pcm/ppm | β_eff | Λ, s |
|---|---|---|---|---|---|---|---|
| T0 (U metal / graphite / air) | 1.05–1.10 | −1…−2 | graphite −1…+1 | — | — | 0.0067 | ~1·10⁻³ |
| T1 (UO₂ 2 % / graphite / boiling H₂O) | 1.2–1.35 | −1…−2 | graphite +1…+6 | +10…+30 | — | 0.0060 → 0.0045 | ~6·10⁻⁴ |
| T2a (VVER, 4 %) | 1.30–1.45 | −2…−4 | −10…−60 | −100…−200 | −7…−10 | 0.0068 → 0.0052 | ~2·10⁻⁵ |
| T2b (BWR, 3 %) | 1.25–1.35 | −2…−3 | (saturated) | −80…−150 | — | 0.0065 → 0.005 | ~2.5·10⁻⁵ |
| T3 (CANDU, natural UO₂ / D₂O) | 1.10–1.15 | −0.5…−1.5 | D₂O ≈ 0…+8 | positive (full voiding +1000…+1500 pcm) | ~−3…−5 (in moderator) | 0.0058 → 0.0040 | ~9·10⁻⁴ |
Fission produces I-135 (half-life 6.57 h), which decays to Xe-135 (9.14 h), a neutron absorber with a cross section of 2.65·10⁶ barn. The samarium chain is Nd-149 → Pm-149 (53.08 h) → Sm-149, which is stable. Equations are solved exactly per SLOW step for every fuel node, using the average flux over the step:
At high flux equilibrium xenon saturates near −2.7 %. Equilibrium samarium does not depend on flux: about −444 pcm.
After shutdown, iodine keeps decaying into xenon while xenon burnout stops: xenon rises, peaks and then decays.
| Flux before shutdown, cm⁻²s⁻¹ | Equilibrium Xe | Xe at the pit bottom | Time to peak (physical) | Back to equilibrium (physical) | Time to peak (real time, K_slow = 72) |
|---|---|---|---|---|---|
| 2·10¹³ (PR-300) | −1770 pcm | −2420 pcm | 6.6 h | 18 h | 5.5 min |
| 5·10¹³ (T1) | −2240 pcm | −4820 pcm | 8.8 h | 29 h | 7.3 min |
| 1·10¹⁴ | −2460 pcm | −8640 pcm | 9.8 h | 38 h | 8.2 min |
Gameplay consequences:
- Xenon dead time. If the pit is deeper than the operating reactivity margin (rods + boron), the reactor cannot be restarted until xenon decays — 15–30 real minutes for T1. You learn not to scram without need and to keep a margin.
- Xenon burnout on power ascent. Coming out of the pit, xenon burns faster than it forms, adding positive reactivity that the rods must compensate. Withdrawing rods all the way to climb out of the pit leaves a small operating margin and strong burnout — exactly the precondition of the RBMK catastrophe (the T1 lesson scenario in Accidents).
-
Xenon oscillations. Each node has its own xenon, so spatial oscillations appear with a period of 15–30 physical hours (12–25 real minutes). Operators watch the axial offset (
core.flux.axial_offset) and radial tilt and damp oscillations with part-length rods or a Lua controller. The mod does not do it for you.
The HMI exposes core.reactivity.xenon, core.reactivity.samarium and core.xenon.trend. The domain also offers a xenon forecast (PoisonTracker.forecast(...)), like the xenon prediction programs at real plants. Samarium rises after shutdown (−566 pcm at 2·10¹³) and does not decay until restart.
Decay heat uses the 23-group ANS-5.1-1979 fit for U-235 thermal fission, with multipliers for Pu-239 (0.90), U-238 (1.15) and Pu-241 (1.0), plus the U-239/Np-239 contribution.
| Time after shutdown | 1 s | 10 s | 100 s | 1 h | 10 h | 1 day | 10 days |
|---|---|---|---|---|---|---|---|
| ANS-5.1, infinite operation | 6.16 % | 4.75 % | 3.10 % | 1.31 % | 0.65 % | 0.50 % | 0.29 % |
| ANS-5.1, 1 year operation | 6.08 % | 4.67 % | 3.02 % | 1.23 % | 0.57 % | 0.43 % | 0.21 % |
Two clocks. If all groups were integrated in the accelerated SLOW domain, decay heat one real second after a scram would already be at its "72 seconds" value, making LOCA and station blackout unfairly easy. So the fast groups 1–8 (λ ≥ 10⁻³ s⁻¹, about 67 % of initial decay heat, dominant for the first ~15 minutes) run in real time in FAST, and groups 9–23 run in SLOW. Hardcore servers can set nuclide.decay_heat_clock = REAL_TIME.
Burnup is tracked in MW·d/kgHM. With only K_slow = 72, the PR-300 core would take 23 real days of continuous full-power operation to reach 40 MW·d/kg — too long for a server. nuclide.k_burn = 4 cuts this to 5.7 real days. It applies only to heavy nuclides and long-lived fission products; short-lived products, poisons and decay heat stay on K_slow, otherwise radiation source terms would be four times too high.
Burnup reactivity is not set — it follows from the changing nuclide inventory. For UO₂ 4 % in T2_HEX, k∞ drops by ≈ 0.009 per MW·d/kg and reaches ≈ 1.0 at 40–45 MW·d/kg; plutonium reaches about 1 % of heavy metal mass with isotopic vector Pu-238/239/240/241/242 ≈ 2/55/24/12/7 %.
Every fuel node (and every fuel_assembly item outside the core) carries a NuclideInventory:
- 14 heavy nuclides: U-235, U-236, U-238, Np-237, Np-239, Pu-238 to Pu-242, Am-241, Am-243, Cm-242, Cm-244.
- Poisons: I-135, Xe-135, Pm-149, Sm-149, plus a lumped fission product.
- Radiological fission products by volatility group: Kr-85, Kr-88, Xe-133 (noble gases); I-131, I-133 (halogens); Cs-134, Cs-137 (alkali); Sr-90, Ba-140 (alkaline earth); Te-132; Ru-106; Zr-95, Ce-144 (refractory); H-3.
This inventory drives the radiation source term (Radiation-Safety), fission product release in accidents (Accidents), and spent fuel handling and reprocessing (Nuclear-Fuel-Cycle). For PR-300, saturated I-131 activity is about 7.3 MCi, matching the "~25 kCi I-131 per MW(t)" rule of thumb.
Integral rod worth in a cosine axial flux follows the S-curve:
A rod is almost useless near the ends of the core and most effective in the middle. In the simulation, worth comes from the nodal model and the actual flux shape, so with xenon the S-curve shifts.
Absorber materials: B4C, AG_IN_CD (80/15/5), HAFNIUM (does not burn out), CADMIUM (T0), BORON_STEEL.
The rod drive is mechanical: normal travel speed comes from Create kinematics (rack, winch). The recommended design limit on reactivity insertion rate is ≤ 10 pcm/s; faster drives are flagged and get earlier rod-withdrawal blocks.
On a reactor trip or loss of drive power, the latch releases the rod after 0.15 s and it falls under gravity, with buoyancy, hydraulic drag and guide friction, and a hydraulic dashpot in the bottom 10 % of travel. For PR-300 (80 kg rod, drag 300 kg/m) terminal velocity is 1.56 m/s and 1 m of travel takes 0.95 s, about 1.15 s from initiating event to full insertion.
- In steam or an empty channel (LOCA) the rod falls faster, but the dashpot does not work without water — it hits the bottom.
- If the channel deforms (overheating above 900 K, seismic event), friction can exceed the rod's weight and the rod sticks — one path to ATWS.
An RBMK-style rod in T1 is modeled as segments: absorber, water-filled link, graphite displacer, and a water column below. When the rod is fully withdrawn, the displacer sits in the middle of the core with water below it. On a scram, for the first seconds the displacer replaces water with graphite in the bottom nodes (water is an absorber in T1, so reactivity goes up there) while the absorber enters only the top. If the flux is skewed to the bottom (top suppressed by xenon after low-power operation), the net effect for the first 2–4 s is positive — a positive scram effect that emerges from geometry and the nodal model, with no special code. T1 drives are servo-only at 0.4 m/s, so 5 m of travel takes 12.5 s. This is a deliberate design trap of T1; T2 designs have no displacers.
Boron is a passive scalar carried by the water. Dilution with clean makeup water is a slow but relentless reactivity insertion: for PR-300 (≈ 21 t primary inventory), 5 kg/s of clean water at 1000 ppm adds about +1.8 pcm/s. Boric acid solubility limits the boron_injection_tank to ≤ 7000 ppm.
ProtectionSystem follows five principles:
-
Independent of Lua. It runs every FAST tick regardless of any CC: Tweaked computer. Lua can request a trip and read state, but cannot cancel a trip or change setpoints without physical access to the
protection_cabinet. - Works on measurements, not truth. Inputs are sensor readings with error, noise, lag and failures. If you did not install a flow sensor, there is no low-flow trip. A failed sensor puts its channel in the tripped state (fail-safe).
- Redundancy and voting — k out of n channels.
- Latching. A trip is reset only by the operator, and only when all causes have cleared.
- First-out. The first cause within a tick is recorded for the annunciator and post-trip review.
| Channel state | Vote |
|---|---|
OK |
no |
TRIP |
yes |
FAULT (broken wire, no power, off-scale, sensor destroyed) |
yes (fail-safe) |
BYPASS (out for maintenance) |
excluded: 2-of-3 becomes 2-of-2; at most one channel per function |
Default trip setpoints for the PR-300 reference (nominal 15.5 MPa, 290/320 °C, 1778 kg/s):
TripReason |
Measured value | Setpoint | Voting | Delay |
|---|---|---|---|---|
MANUAL |
panel/cabinet buttons | — | 1 of 2 | 0 |
HIGH_FLUX |
ion chamber power | 107 %; low setpoint 25 % during startup (< 10 % power) | 2 of 3 | 0 |
SHORT_PERIOD |
reactor period | < 10 s | 2 of 3 | 0 |
HIGH_PRIMARY_PRESSURE |
pressurizer pressure | 16.6 MPa (1.07 × nominal) | 2 of 3 | 0 |
LOW_PRIMARY_PRESSURE |
pressurizer pressure | 13.7 MPa | 2 of 3 | 0.5 s |
LOW_COOLANT_FLOW |
flow per loop | 90 % in any loop | 2 of 3 per loop | 0.3 s |
HIGH_COOLANT_TEMP |
hot leg temperature | 330 °C (T0: graphite > 450 °C) | 2 of 3 | 0 |
LOW_DNBR |
calculated MDNBR | 1.45 | 2 of 3 calculators | 0 |
LOW_SG_LEVEL |
steam generator level | 25 % narrow range | 2 of 3 per SG | 2 s |
HIGH_CONTAINMENT_PRESSURE |
containment pressure | 0.13 MPa abs | 2 of 3 | 0 |
LOSS_OF_DRIVE_POWER |
CPS drive torque lost; main coolant pump speed < 93 % | 0.93 ω | 1 of 1 / 2 of 3 | 0 / 0.5 s |
TURBINE_TRIP |
turbine stop valves closed | at power > 50 % | 2 of 2 | 0 |
SEISMIC |
accelerometers | PGA ≥ 0.1 g | 2 of 3 | 0 |
LUA_REQUEST |
Lua call | — | 1 of 1 | 0 |
All setpoints are server config. A player can tighten a setpoint at the cabinet, but never loosen it beyond the config.
The calculated DNBR used by the trip is deliberately conservative (pressure −0.2 MPa, flow −5 %, inlet temperature +2 K, power +2 %). You cannot reduce the conservatism, but you can improve measurements (more sensors, in-core detectors) to avoid spurious trips when running near the limit.
Pre-trip actions: rod withdrawal block at period < 20 s or power > 104 %; stepback (rapid power reduction to ≤ 50 %) on loss of one main coolant pump above 50 % power; safety injection signal at P < 12.5 MPa or high containment pressure.
Trip state machine: NORMAL → TRIP_PENDING (delay timer) → TRIPPED → RESET_ARMED → NORMAL. A reset with an active cause is refused. A cabinet failure (destroyed, no power) goes to TRIPPED. A failure to trip (common-cause failure injected by an accident, such as an explosion damaging the cabinet without de-energizing it) goes to FAILED_ARMED, where trip conditions are ignored — the ATWS scenario.
A compact unit with 60 MW/m³ in fuel cells (like marine and small PWRs), so the core stays readable at Minecraft scale: a 3×3×1 core with 5 fuel_channel cells (corners and center) and 4 control_rod_channel cells (edge middles), plus a reflector/vessel layer.
| Parameter | Value |
|---|---|
| Thermal power | 300 MW(t) |
| Fuel | UO₂ 4.0 %, 30,000 rods × 1 m; 14.05 t UO₂ / 12.4 t U / 496 kg U-235 |
| Average / peak linear heat rate | 10 / 20 kW/m |
| Neutron flux | ≈ 2·10¹³ cm⁻²s⁻¹ |
| Fuel centerline, average / hot rod | 602 / ≈ 1014 °C |
| Primary pressure | 15.5 MPa (T_sat = 344.8 °C) |
| Inlet / outlet | 290 / 320 °C |
| Flow | 1778 kg/s (2 loops × 889) |
| Primary coolant mass | ≈ 20 t (≈ 30 m³) |
| Pressurizer | 6 m³, 3.5 m³ water, 300 kW heaters, spray ≤ 10 kg/s |
| Relief / safety valves | 16.2 / 17.2 MPa |
| Main coolant pumps (×2) | 0.40 MPa head, 1500 rpm, 617 kW shaft, J = 300 kg·m², τ = 12 s |
| Steam generators (×2) | 150 MW each, 6.4 MPa steam, 81.7 kg/s steam each |
| Nominal MDNBR | ≈ 3.7 |
| Boron at beginning of cycle | 1000 ppm, −7.4 pcm/ppm |
| Rods (4 banks) | −8000 pcm total, 1 m travel, 0.95 s drop |
| Cycle to 40 MW·d/kg | 1650 physical days = 5.7 real days at 100 % |
Scram from full power:
| t, s | Rod position | ρ, pcm | Fission power n | Thermal power (with decay heat) |
|---|---|---|---|---|
| 0 | 0 | 0 | 1.000 | 100 % |
| 0.2 | 0 (release) | 0 | 1.000 | 100 % |
| 0.5 | 0.29 | −1118 | 0.375 | ≈ 41 % |
| 0.8 | 0.75 | −7300 | 0.077 | ≈ 13 % |
| 1.2 | 1.00 | −8000 | 0.064 | ≈ 12 % |
| 10 | 1.00 | −8000 | 0.024 | ≈ 7 % |
| 60 | 1.00 | −8000 | 0.0045 | ≈ 3.5 % |
Loss of both main coolant pumps: flow coasts down as ṁ₀/(1 + t/12). The low-flow trip fires at 1.35 s, rods release at 1.85 s, MDNBR bottoms at 3.43 at 2.0 s, and natural circulation takes over around 20 s. Without a scram (ATWS), power falls only through negative coolant feedback (0.87 at 5 s, 0.41 at 60 s) while the coolant overheats.
| Parameter | Value |
|---|---|
| Multiblock | 7×7×7 graphite; fuel in the central 5×5×5 (125 T0_SLUG cells); 1 m graphite reflector |
| Fuel | natural uranium metal, ≈ 35 t |
| k∞ target | 1.07 with nuclear-grade graphite; ≈ 1.02 with technical-grade graphite — never critical at any size |
| k_eff | 5×5×5 + reflector: 1.012 (+1160 pcm margin, cadmium rods required); 4×4×4 + reflector: 0.988 (subcritical) |
| Λ / β_eff | 1.2·10⁻³ s / 0.0067 |
| Nominal power | 2 MW(t), limited by air cooling (20 kg/s at ΔT = 100 K from Create fans) |
| Limits | U metal α→β phase change at 668 °C; Al cladding melts at 660 °C → fuel limit 450 °C; graphite oxidizes in air above 400 °C; Wigner energy builds up when graphite is irradiated below ~250 °C |
| Neutron source | 4.8·10⁵ n/s from spontaneous fission + 1 Ci Am-Be startup source |
Approach to criticality by 1/M:
| Fuel layers (5×5) | k_eff | M = 1/(1−k) | 1/M (normalized) |
|---|---|---|---|
| 1 | 0.883 | 8.5 | 1.00 |
| 2 | 0.959 | 24 | 0.35 |
| 3 | 0.989 | 91 | 0.094 |
| 4 | 1.004 | supercritical | 1/M extrapolates to zero between 3 and 4 layers |
The fourth layer must be laid with cadmium rods inserted, exactly as on CP-1. Pulling a cadmium rod by +100 pcm gives a 56 s period — the "safe" kinetics that T0 teaches.
Estimated cost for 4 reactors (2 × PR-300, a 1200-node T1, a T0), 400 hydraulic elements, 20 players: ≈ 142 µs/tick, about 7 % of the 2 ms nuclear island budget. One PR-300 costs ≈ 25 µs against a 150 µs limit.
| Naive per-block | LEM | |
|---|---|---|
| Nodes | 400 pipes + 1500 core cells | ~110 hydraulic nodes + ~100 thermal groups |
| Step | 1 ms → 50 substeps/tick | 50 ms, 1 substep |
| EOS calls per tick | 20,000 | 110 |
| Total physics | > 4.3 ms | ~0.14 ms |
Large cores are grouped: above 64 fuel columns (thermal) or 16 parallel hydraulic channels, columns are clustered by k-means into groups, each with a representative rod and a hot channel. Density-wave oscillations in boiling T1/T2b cores still reproduce with groups.
Under overload, the simulation degrades gracefully: DNBR at 5 Hz and nodal solve at 0.5 Hz first, then SLOW at half rate, and finally a visible "simulation lag" on the HMI. Kinetics, ProtectionSystem and gravity rod drop run every tick without degradation, always.
- Accidents — LOCA, SBO, ATWS, RIA and what happens past the limits
- Nuclear-Fuel-Cycle — where the fuel comes from and where it goes
- Radiation-Safety
- Progression — reactor tiers T0–T4
- Create-Integration — pumps, rod drives, turbines on Create shafts
-
CC-Tweaked-API and SCADA-and-HMI — tags such as
core.periodandcore.reactivity.xenon - Architecture
Prompt Critical · © 2026 denfry · Repository · Report an issue
Start here
Design
Nuclear
Industries
Control and automation
World and server
Development