One charge of heat and steam, sent around a working locomotive, with the real numbers shown
This is a side-on cutaway of a steam locomotive standing in a yard. A glowing charge of heat and steam leaves the Firebox and travels the engine's own internal path — not the rails — through the Boiler Tubes, up into the Steam Dome & Regulator, down to the Cylinder & Piston, out to the Driving Wheels, and up the Chimney & Blastpipe. From there a second, dashed path carries the exhaust's induced draft back over the top of the boiler to the Firebox: that is a real feedback loop the model computes, not a decoration, and it is why the fire burns differently on lap five than it did on lap one with no slider touched.
The boiler and cab are drawn semi-transparent on purpose — this is a cutaway, and the charge travelling inside has to stay visible through the shell. The colour of the charge is the actual firebox heat output; the label riding above it is the actual boiler pressure.
Genuinely computed, live, in your browser: combustion heat release from coal
rate and air draft; boiler steam generation and a running pressure integral (this lap's
generation minus last lap's draw-off, capped at a 180 psi safety valve); the regulator's
metered flow; the classic cutoff / mean-effective-pressure relationship c − c·ln(c)
that gives piston force its real steam-engine shape; torque from force and crank radius; the
speed the engine settles at, found by solving tractive effort against a Davis-form rolling
resistance curve rather than looking it up; wheel rpm from that speed and the wheel diameter;
exhaust velocity from continuity; and the induced draft that feeds back into the Firebox. It
is all in js/model.js, under 200 lines, and every slider reaches it immediately.
Scaled down: a two-cylinder engine with a modest boiler, standing in for a full mainline locomotive's much larger one.
Assumed: boiler thermal efficiency (~65%); the pressure-rise constant standing in for the boiler's real thermal mass, tuned so it visibly reaches a working pressure in a handful of laps instead of the many minutes a real boiler takes; the regulator's flow coefficient; the Davis-form rolling-resistance coefficients, which represent this engine plus a short, otherwise-unspecified cut of yard cars rather than a sourced performance chart; the draft-vs-exhaust-velocity constant; and the shape of the combustion-efficiency- vs-draft curve.
Deliberately not modelled: reciprocating counterbalance and valve events at speed, which in a real locomotive cap how fast the motion can safely turn over. Push every slider to its limit and this model will report a higher speed than any real example of this size ever ran — treat extreme slider settings as a way to see the shape of the mechanism, not as a performance claim.
Scenery: the water tower, coal stage, trees and lamps. They are there so the locomotive has a yard to stand in. Treat them as illustration and the panel's numbers as the lesson.
The first time the charge reaches a station it stops for long enough to read that station's write-up — between 9 and 26 seconds, depending on how much there is to say — and a progress bar under the panel text shows how much of the stop is left. Once every station has been explained there is nothing new to read, so later laps run at a watchable pace instead of a readable one, even though the numbers themselves keep changing as the boiler builds pressure. Space holds any stop indefinitely, S steps one station at a time, and the Speed slider scales everything, reading stops included. Reset (⟲) cools the boiler back to a cold start and replays the slow tour; Run keeps the engine hot and keeps what you have already read.
Five laps run in a row on purpose. The engine is visibly stronger on the last one than the first, and no slider moved between them — only the boiler pressure and the induced draft, both of which the model carries forward lap to lap. That build-up is the single most useful thing on this page.
Built from the isometric-explainer skill. All code and copy original.