MaximaLabs
Back to gallery
Steam power station

Rankine steam power cycle (pump -> boiler -> turbine -> condenser) — a STEAM process flowsheet

The classic steam power cycle behind most of the world's electricity, on the rigorous IAPWS-97 steam properties. Feedwater is pressurized by a boiler-feed pump, fired to superheated steam in the boiler, expanded through a steam turbine to make shaft power, then condensed back to water in the surface condenser. The four Rankine components appear in order, and the numbers are the real thermodynamic ones: at 60 bar / 500 degC steam expanding to a 0.1-bar condenser vacuum the turbine makes ~18 MW of shaft work at 85% isentropic efficiency, the exhaust leaves the turbine as wet steam (~92% quality, the classic low-pressure blade-erosion concern), the condenser rejects ~40 MW to cooling water, and the feed pump costs only ~0.15 MW (the small back-work ratio that makes the Rankine cycle practical, since pressurizing a liquid is nearly free next to expanding a gas). Cycle thermal efficiency comes out ~28%. Every property (the superheat enthalpy, the isentropic expansion endpoint, the exhaust steam quality) is the real IAPWS steam-table value, not a correlation.

Modeling assumptions & limitations

  1. 1An open (once-through) view of the cycle rather than a physically closed loop (a real plant recirculates the condensate); no reheat or feedwater regeneration stage (a single expansion, no extraction), so the efficiency is the simple ideal-cycle figure, not a supercritical/reheat station's ~45%.

109 views 1 forks

Feedwater
PUMP
Boiler
Turbine
Condenser
Condensate
What this showcases
  • Rigorous STEAM thermodynamics, solved by the same engine every simulation runs on.
  • 4 unit operations modeled: PUMP, Boiler, Turbine, Condenser.
  • Focus areas: Rankine cycle, Steam turbine, Power generation, Boiler, IAPWS.
  • Verified fast convergence — a real, measured solve time, not an estimate.
Specification
Thermodynamics
STEAM
Components
water
Unit operations
PUMPBoilerTurbineCondenser
Open in workspace

Opens in a new tab, loaded straight into the app — no setup.

Read the step-by-step guide
Python SDK

Reproduce this exact result from Python — the real client.get_example() → run_and_wait() path, not a mockup.

from flowsim.sdk import FlowSimClient

client = FlowSimClient()
example = client.get_example("rankine-steam-power-cycle")
sim = client.create_simulation(example["title"], example["flowsheet"])
result = client.run_and_wait(sim["id"])

print(result["status"])              # "converged"
streams = client.streams(sim["id"])

Related models

Reference model

Steam utility island: deaerator, boiler, desuperheater

The three units that stand between raw makeup water and steam a turbine can accept, on the IAPWS steam tables. The deaerator takes 500 mol/s of 300 K makeup and 40 mol/s of LP steam and returns 540 mol/s of saturated liquid at 5 bar (425 K) for 3.23 MW. It is a direct-contact heater, so the heating steam does not leave — it condenses into the feedwater and shows up in the outlet flow. That is the point of the unit: the reason a plant heats feedwater by injecting steam into it rather than through a tube bundle is that boiling the water is what strips the dissolved oxygen out of it. The boiler then absorbs 26.6 MW into the water and fires 31.3 MW to do it — the gap is the stack loss, and it is the number a fuel bill is written against, not the absorbed duty. The desuperheater takes that 720 K steam down to a 660 K target by spraying 25.96 mol/s of water into it. The spray rate is SOLVED, not specified: you state the temperature you want and the unit finds the water that achieves it, which is how an attemperator is actually specified. Note the outlet is 566 mol/s, more than entered it, the spray water becomes steam. Bounded: the deaerator is an equilibrium model, so it reports no rate-based O₂/CO₂ stripping (there is no residual-oxygen ppb number here, which is what a real deaerator is guaranteed on), and the desuperheater assumes the spray fully evaporates.

Container ship engine room, Port of Rotterdam, Netherlands

Organic Rankine Cycle — marine diesel exhaust waste-heat recovery

A closed R245fa Rankine loop recovers waste heat from a heavy marine diesel engine's exhaust: a two-stream boiler vaporizes the working fluid against the hot exhaust gas, a real isentropic-efficiency turbine expands it to shaft power, an ambient-cooled condenser returns it to saturated liquid, and a pump restores boiler pressure. The exhaust-gas composition is a representative combustion-product mix (N₂/CO₂/O₂/H₂O), not a specific engine's measured flue analysis.

NET Power demonstration plant, La Porte, Texas, USA

sCO2 Allam-Fetvedt oxy-combustion power cycle

Natural gas burns in near-pure oxygen, diluted by a large recycled supercritical-CO₂ flow instead of air's nitrogen — the oxy-combustion, near-critical-CO₂ cycle that yields pipeline-ready CO₂ with no separate capture step. Main compressor takes CO₂ from just above its critical point (310 K, 8 MPa vs. Tc=304 K/Pc=7.38 MPa) to 30 MPa; the combined CO2+combustion-product stream expands through a real isentropic-efficiency turbine, still supercritical throughout.

Ruhr Valley, Germany

Flue-gas desulfurization: venturi wet scrubber

A coal/oil-fired power-plant stack gas (SO₂ in a hot N₂/CO₂/O₂/water flue) is cleaned in a high-energy venturi wet scrubber before the stack — the classic flue-gas-desulfurization (FGD) front end. The new venturi_scrubber unit op accelerates the gas through a throat where injected scrubbing water is atomized, and a stated fraction of the soluble SO₂ is absorbed into the drops and carried out as a slurry while the cleaned gas goes up the stack. Two cited pieces are computed: the momentum-exchange pressure drop ΔP = ρ_L·(Q_L/Q_G)·v_gt² (Calvert 1968; de Nevers — the L/G here is ~1.4 L/m³ and the throat runs 90 m/s, giving ~11 kPa, a real high-energy venturi), and the SO₂ removal (92% at this water rate) that drops the stack SO₂ to a fraction of the inlet.

Songdo, Incheon, South Korea

Desiccant rotor HVAC — three-stage low-grade heat recovery

A desiccant dehumidification rotor whose regeneration air is preheated by three low-grade heat sources in ascending temperature order: a PVT (photovoltaic-thermal) collector loop at 40 °C, condenser heat rejected by the chiller at 50 °C, and a district-heating return at 55 °C. Cascading them warmest-last is the whole point — each coil lifts the air as far as its own source can reach, so the 55 °C district return is spent only on the final lift instead of being wasted on air that is still at ambient. Every coil leaves a 5 K approach at its hot end, which is what makes this solvable: a cold stream can never leave an exchanger hotter than the hot stream entering it, and in a series train each coil's outlet is the next one's inlet, so a target that looks reasonable in isolation becomes impossible two units downstream. The hot-side flows are sized so the water gives up its duty over a modest ΔT and stays above the air at the cold end as well — specifying the approach alone is not enough if the heat-capacity flow rates don't support it. The rotor's two halves are custom_block equation blocks (the regen side and the process side), and the process air is finished to a 16 °C supply condition by the evaporator coil.

Reference model

Instrumentation: transmitters and controllers on the canvas

Field instruments are first-class wireable nodes here, not annotations. A flow transmitter and a pressure transmitter sit in the line, pass their stream through completely unchanged, and report their reading on a signal wire — a distinct edge kind that carries information rather than material — to a controller. In this let-down station the FT reads the 200 mol/s flowing through it and the PT reads the 20 bar downstream of the control valve. Each controller compares its reading against a setpoint and reports the measurement, the setpoint and its output. These two controllers are report-only, deliberately. Neither has an OUTPUT wire, so nothing is written back and the flowsheet solves once — this is the instrumentation and measurement layer on its own. Give a controller an output wire plus an output_param and the same machinery becomes a genuine closed loop: the output is written into the manipulated variable and the flowsheet re-converged through a Wegstein outer loop. Bounded: a signal edge never carries material, so it can never affect a mass or energy balance — which is exactly why a transmitter is safe to insert anywhere in a working flowsheet. The steady-state controller is proportional by default and therefore keeps a genuine offset (it converges the self-consistent operating point, not the setpoint); integral removes that offset. Derivative action needs a time history a single steady-state solve does not have.

Stop fighting legacy software. Build your first flowsheet in 60 seconds.