# "Scenario: loss of coolant"

# Scenario: loss of coolant

A small reactor sits in a containment. Its coolant gives up heat to a turbine, the turbine turns a generator, the generator lights a lamp. Then the coolant pump stops.

The turbine has no heat to use, and the lamp goes out. The fuel temperature trips the reactor, and the rods drop. Fission stops within seconds, but the **decay heat** does not. It is a few percent of full power and falls slowly, and with no coolant it can only leave through the fuel's contact with the containment, which warms for as long as that lasts. The scenario is the order of those events.

## The chain

| Stage | Capability | Object | Handed on by |
|---|---|---|---|
| Core, rods, trip | nuclear (skill `ferret-physics-chemistry-nuclear`) | `Reactor` | the fuel and coolant temperatures, the flow |
| Coolant heat to the shaft | links (skill `ferret-physics-links`) | `turbineOnReactor` | a torque on the shaft |
| Shaft, generator, lamp | machines (skill `ferret`), electricity (skill `ferret-physics-electric`) | `Drivetrain`, `DCMachine`, `Resistor` | `gen.omega = shaft.omega` |
| Decay heat into the building | links and heat (skill `ferret-physics-heat`) | `reactorHeatsPart`, `HeatNetwork` | the part's temperature |

## Building it

```ts
const reactor = new Reactor({ power: 1e6, generation: 1e-4, rodWorth: 0.05, rodsCritical: 0.5,
  fuelHeat: 5e5, coolantHeat: 2e5, exchange: 5e4, flow: 2e4, inlet: 290,
  fuelCoefficient: -2e-5, melt: 1800, trip: { fuel: 400 } });

const turbine = turbineOnReactor(reactor, shaft, { efficiency: 0.3, maxTorque: 400 });
const contact = reactorHeatsPart(reactor, containment, net, 2000);   // 2 kW/K between the fuel and the building
```

The pump stopping is one line: `reactor.flow = 0`.

## The timeline

- **0 to 120 s. Normal running.** The turbine takes `efficiency × flow × (Tc − inlet)` and the lamp is lit. The fuel is at about 360 K. The containment, which it always touches, takes a share of the heat.
- **120 s. The pump stops.** The coolant stops carrying heat away, so the coolant temperature and then the fuel temperature climb. The turbine's input falls to zero with the flow, and the lamp dies with it.
- **About 40 s later. The trip.** The fuel temperature passes its trip level and the core scrams. The rods drop at `scramSpeed`, and fission falls by orders of magnitude, but not to zero: the decay groups keep `reactor.decayHeat` going at 6–7 % of full power at once.
- **After.** The fuel's only way out is `reactorHeatsPart`. `reactor.sink` is the power it carries; the containment's mass sets how fast it warms (a few tenths of a kelvin here: it is a very large heat sink). A larger conductance protects the fuel and heats the building faster; a smaller one does the reverse, and the melt limit decides which side is the dangerous one.

With the pump running throughout, the core never trips and the lamp stays lit.

## Variations

| Change | Effect |
|---|---|
| No trip (remove `trip`) | the negative fuel coefficient throttles fission as the fuel heats, so the core settles at a lower power; slower and hotter than a scram |
| Contact conductance 0 | decay heat has no path; the fuel heats until it melts and `reactor:melt` fires once |
| A backup pump: set `reactor.flow` to a fraction after a delay | the turbine runs at a fraction, the fuel cools, decay heat is carried again |
| Containment mass 5e3 instead of 5e5 | the building warms a hundred times as fast: the case for a water pool |
| The [tank scenario](tank-fire.md) applied to the containment | a hot building with a gas in it is a pressure vessel |

The complete run, with the numbers it must produce, is in `tests/unit/examples/physics-scenarios-loss-of-coolant.test.ts`.
