← Back to Projects
Personal project · Sept – Oct 2026

BWRX-300 Natural-Circulation Model & Loop Simulator

Rev A issued for independent review · Oct 2026
Thermal-hydraulics Two-phase flow Python Nuclear
BWRX-300 Loop Simulator: the reactor vessel drawn to scale next to the reactor power controls and live readouts

Overview

The BWRX-300 is the small modular reactor being built at OPG's Darlington New Nuclear site. It has no recirculation pumps. Water moves around the vessel on its own: cooler, heavier water sinks down the outside, and the lighter steam-water mix rises through the core and a tall chimney above it.

I built a model that finds how much water flows through the core at each power level, using public design data only. I wrote it up the way a nuclear company documents a calculation, with numbered inputs, assumptions, sources, verification tests and a review step, then turned it into a live simulator.

1,827 kg/sRated core flow, calibrated to the published value
1,907 kg/sPeak core flow, at 55 % power (HEM)
0.257Core exit steam quality at rated power
270.0 °CCore inlet temperature, matching the published 270 °C
7 of 7Verification tests passed (145 tests in total)
0.032 %Largest gap between my hand calculation and the code

How the model works

Natural-circulation loop: downcomer, lower plenum, core, chimney and steam separators
The loop. Denser water in the downcomer drives the flow up through the core and chimney.

Results

Core flow rises with power, peaks well below rated power, then falls as the steam-water losses grow faster than the buoyancy push. With the homogeneous model it peaks at 1,907 kg/s at 55 % power. With drift-flux it peaks later, at 1,855 kg/s at 70 %.

From 20 to 60 % power, the homogeneous model puts the chimney water velocity above the highest value the designers tested (0.31 m/s), peaking at 0.328 m/s. Drift-flux stays inside at 0.308 m/s, so the overshoot comes mainly from assuming the steam and water move together.

The form-loss coefficient has the biggest effect on flow (+33 % / −17 %), then the void model (−12 %), then chimney height (about ±5 %).

Because the losses are tuned to the published flow, the model predicts the shape of the flow curve and the part-power behaviour, not the rated flow itself.

How I checked it

Project flow: nine phases, each with a check that has to pass before moving on
Project flow. Each phase has a check that has to pass before moving on.

Loop simulator

I also built the model into a simulator that runs in your browser, using the same equations as the Python code. The vessel is drawn to scale. You can change the reactor power and the steam model, test the inputs that aren't published, and run power changes like a cut to 50 % or a trip to 6 % to see how long the loop takes to settle. Every time it loads, it rechecks 12 results against the calc report.

Hover over any underlined term (or tap it on a phone) for a plain-language definition.

What's next

Tools

Python NumPy SciPy Matplotlib CoolProp pytest Git

Educational project based on publicly available information. Not affiliated with or endorsed by GE Vernova Hitachi Nuclear Energy or Ontario Power Generation. Not for design, licensing or operational use.