Theory & Method
h–s (Mollier) Diagram Simulator · AntraSIM-0050 · version 1.1.0 · build 2026-09-21. This document describes the model as implemented in the application. Where the source implementation (v1.0.0), the standard and the executable code disagree, §2 states which was implemented and why.
Model status. The property kernel reproduces every published verification value of the IAPWS-IF97 release that it implements (maximum relative deviation 2.81e-9 in the region 1 table and 2.87e−9 over T1–T4), the region-boundary consistency reported in the release, and an independent implementation on 1152 single-phase states (largest relative deviation of the specific volume 4.43e−13, of the enthalpy 2.53e−10 kJ/kg absolute). The application is not validated against measured or plant data. The process classification and the cycle totals are rule-based interpretations of the state points, not a cycle simulation, and the twelve process examples of §6 are illustrations computed by the same solvers, not plant data.
How to read this document. Each topic follows the progression Intuition → Physical mechanism → Mathematical formulation → Engineering interpretation → Assumptions and limitations. A newcomer can stop after the first two layers; an experienced engineer finds the equations, the solvers and the verification basis in the later layers and in §8. Every number in the tables and in the text of §5, §6 and §8 was produced by the code of this release when the document was built; none was typed by hand.
1. Physical Background
Intuition An h–s diagram (Mollier diagram) plots specific enthalpy against specific entropy. Enthalpy is the quantity that a steady stream of fluid carries with it, so in this diagram energy transfers are vertical distances: the work of an adiabatic turbine or pump and the heat of an isobaric heater or condenser are read as differences in height. Entropy grows whenever a process is irreversible, so an ideal (reversible, adiabatic) machine is a vertical line and every real machine leans to the right. A throttling valve does neither work nor heat exchange: enthalpy stays constant and the state moves horizontally to the right. The bell-shaped curve is the boundary between liquid, the two-phase mixture inside it and vapour; the left branch is saturated liquid (x = 0), the right branch saturated vapour (x = 1).
Physical mechanism Water and steam are described by a fundamental equation for each region of the state space. A state is fixed by two independent properties; all other properties follow from the equation.
two properties (basis)→IAPWS-IF97 region and solver→T, p, h, s, v, u, x→point in the h–s plane→process interpretation between points
The geometry of the diagram follows from the fundamental relation of a simple compressible substance,
At constant pressure it gives the slope of an isobar in the (s, h) plane, and along an isentrope it gives the enthalpy change of a pump or an ideal turbine:
Isobars therefore rise from left to right and become steeper with temperature. Inside the dome pressure and temperature are tied to each other, so an isobar is a straight line with the constant slope Tsat(p), and an isotherm inside the dome coincides with the isobar. In the vapour at low pressure the enthalpy hardly depends on pressure (ideal-gas behaviour), so isotherms become nearly horizontal there. The quality of a mixture is the position of the state on the straight isobar between the saturation points (lever rule, §3).
Engineering interpretation The specific work of an adiabatic machine is w = −Δh, the heat of an isobaric exchanger q = Δh (first law for steady flow, §3). The isentropic efficiency of a turbine is the ratio of two vertical distances taken from the same inlet point: the actual drop Δh and the isentropic drop Δhs. The horizontal displacement of the actual end state from the isentropic one is the entropy generated in the machine. A steam-cycle sketch on the diagram is therefore a direct picture of the energy balance, in contrast to the T–s diagram in which heat is an area; the price is that the mean temperature of heat addition is not visible as an area but as the slope of the chord that joins two states of an isobar.
Assumptions and limitations Pure water in equilibrium states; steady flow with negligible kinetic and potential energy for the process interpretation. Metastable states, mixtures and non-equilibrium phenomena are not represented (§10). The enthalpy and entropy scales use the reference of the release (saturated liquid at the triple point: u = s = 0).
2. Assessment of the Source Models
Changes in v1.0.1 and v1.1.0 Version 1.0.1 restyled the application to the AntraSIM family standard (light theme, layout, dialogs, keyboard control, IC save and load), added the eleven process examples of §6 and the verification tests T12 and T18–T22 (T1–T11 and T13–T17 replace the “Verify IF97” button of v1.0.0, which checked 30 reference values and an (h, s) inversion sweep that excluded liquid states and reported no pass or fail per test). Version 1.1.0 adds independent process paths (several paths in one diagram, each with its own name, colour, line style and visibility; the first point of a new path is never connected to an earlier path), a complete settings export and import that carries all paths, the twelfth example (6.12, two throttling paths), the correction of the disappearing curves (A-19, test T23) and 0.2 bar and 2 bar in the default isobars (18 entries, a 1-2-5 sequence from 0.05 bar to 1000 bar). The IC schema is now 2 (schema 1, one list of state points, is converted to “Path 1”); the thermodynamic model, the isoline construction and the solvers are unchanged. The findings A-1 to A-19 below were made when v1.0.1 and v1.1.0 were prepared.
Rule The source is the application v1.0.0 (2026-09-17). Its executable code was read completely, its property kernel was compared with the standard, with the T–s Diagram Simulator v1.0.2 (whose kernel is the same code with the correction A-4) and with an independent implementation, and every finding was given an identifier and a size computed by the present implementation. The kernel and the isoline construction are kept; the corrections are listed. Where text and code disagree, the executable model is implemented.
| ID | Finding in v1.0.0 | Size (from this implementation) | Resolution |
|---|
| A-1 | Property kernel (regions 1–4) against the published verification values of the release. | max relative deviation 2.81e-9 (region 1), 2.10e-9 (region 2), 2.10e-9 (region 3), 2.87e-9 (region 4 and B23) (T1–T4). | Retained unchanged. The kernel is the audited kernel of the T–s Diagram Simulator v1.0.2, which differs from the v1.0.0 kernel of this tool only in A-4 and A-16. |
| A-2 | Consistency of regions 2/3 and 1/3 at the region boundaries (not tested in v1.0.0). | 2/3: 1.81e-2 %, 1.34e-1 kJ/kg, 1.75e-1 J/(kg K); 1/3: 3.57e-3 %, 3.06e-2 kJ/kg, 4.22e-2 J/(kg K). The release reports maxima of 0.018 %, 0.134, 0.177 and 0.004 %, 0.031, 0.042. | Retained; the values reproduce the published maxima, which verifies the coefficient tables of regions 1, 2 and 3 as a whole (T7). |
| A-3 | The dome changes formulation at 623.15 K (regions 1/2 below, region 3 with saturated-density correlations above). | Jump at 623.15 K: 3.80e-2 kJ/kg, 6.24e-2 J/(kg K), 1.00e-2 % (Prague values 0.2, 0.2, 0.05). | Retained; new test T8. |
| A-4 | A state given exactly on the saturation line by (p, h), (p, s) or (h, s) is not found: the two-phase test compares with round-off-sensitive equality. The click solver of the diagram, (h, s), is affected in the same way. | 17 of 48 boundary states (12 temperatures × x = 0, 1 × (p, h), (p, s)) and 9 of 24 with (h, s) returned no state. | Corrected. A relative tolerance of 1e-9 assigns such states to the saturation boundary; see A-16 for the second part of the same defect (T12). |
| A-5 | Saturated properties close to the critical point differ from an independent IF97 implementation (Tc − T below about 4 K), because the phase-equilibrium densities of the flat region-3 loop are ill-conditioned. | See Table 8.4: up to 0.16 kJ/kg at Tc − T = 2.1 K and 6.4 / 3.7 kJ/kg (liquid / vapour) at 0.6 K. Effect on the plotted dome below 0.010 kJ/(kg·K), invisible on the diagram. | Retained. The design (no refinement for Tc − T ≤ 1 K) is documented in §7; the difference is not an error of the plotted curve. |
| A-6 | The state (T, s) is not unique for liquid below about 4 °C (density maximum); the lowest-pressure root is returned. | Entropy spread of the liquid at 1 °C over ps … 100 MPa: 0.0099 kJ/(kg·K). | Retained (documented in v1.0.0). New: a WARNING is shown for every point defined by (T, s) below about 4 °C. |
| A-7 | A basis change in the table silently moved the point: a single-phase state changed to (p, x) or (T, x) was put on the saturation line, a two-phase state changed to (p, T) became saturated liquid. | Deviation of the state by construction (not representable). | The move is reported in the table editor. T13 excludes these non-representable conversions and checks all others. |
| A-8 | Pressures above 100 MPa entered in (p, h) or (p, s) were silently reduced to 100 MPa by the solver. | The input (200 MPa, 3000 kJ/kg) returned a state at 1000 bar. | Input limits: pressure 1e-4 … 1000 bar for every basis; out-of-range input is marked and rejected (T18). The kernel keeps its clamp; it is not reachable from the interface. |
| A-9 | Point names were inserted unescaped into innerHTML and attribute values (state card, table); a name or a CSV file could inject markup. | Security and robustness defect. | Names are 1–16 characters and are always written as text or escaped; validated in editor, CSV and IC. |
| A-10 | The pop-out table window was built by writing the raw document stream into a new window (the document-stream write method, a pattern that antivirus heuristics flag). | — | Built with DOM APIs; the identical editor stays in the page. |
| A-11 | CSV import applied a file partially (rows that could not be read or resolved were skipped and only counted), a number followed by text was accepted (“500x” is read as 500), and the isoline lists dropped entries that are not numbers without a message. | parseFloat(“500x”) = 500; the list “1, x, 3” became [1, 3]. | Strict parser; the whole file is rejected on any error with line-numbered messages, lists with a non-number are marked invalid (T17, T18). Files written by v1.0.0 are still accepted. |
| A-12 | An edit that could not be resolved left the point without a state; it disappeared from the plot. | — | Invalid edits are blocked and marked; the last valid state stays in force. |
| A-13 | The solver accepts temperatures down to Tt − 0.5 K = 272.66 K, below the lower limit 273.15 K of the standard. | Extrapolation of up to 0.5 K. | Retained (avoids rejecting clicks on the 0 °C line); a WARNING is shown for points below 0 °C. |
| A-14 | The click basis (h, s) determines the pressure only weakly in the compressed-liquid corner (h and s of liquid hardly depend on p); no warning was given. | Round-trip error of the pressure in the liquid region 8.40e-6 relative (elsewhere 1.81e-8); h and s are reproduced to 1e-5 kJ/kg. | Retained; a WARNING recommends (p, T) or (p, x) for points in the compressed-liquid corner (T10). |
| A-15 | The isoline sets needed a “Rebuild isolines” button. | Default build 20 ms (Node 22). | Rebuilt automatically after every valid change (debounced); the button is removed. |
| A-16 | New in this audit. Even with the tolerance of A-4, a state within about 1 µK of the saturation line on the single-phase side (2 to 10 parts per billion of h or s) fell into a gap between the saturation test and the search bracket and returned no state. Saturated liquid at 450 K in (h, s) is an example. | Sweep of 4476 saturation states (274 … 646.5 K in steps of 0.5 K, x = 0, 1, (p, h), (p, s), (h, s)): v1.0.0 1410 failures, with A-4 only 58, this release 0. | Corrected in the single-phase search of the (p, h) and (p, s) solvers: a state in the gap is returned at the bracket end (temperature error below 1 µK). This is the only other change of the numerical kernel (T12). The T–s Diagram Simulator v1.0.2 has the same defect. |
| A-17 | New in this audit. The saturated liquid and vapour jump at Tc − 1 K, where the formulation changes from the equilibrium densities of region 3 to the saturated-density correlation alone. | Liquid: Δsf = 7.01 J/(kg·K), Δhf = 4.51 kJ/kg, Δvf = 0.87 %; vapour: 6.56 J/(kg·K), 4.23 kJ/kg, 0.72 %. | Retained and documented (this is the origin of the large deviations of A-5 very close to Tc); measured in T19. It is below the width of a line on every axis range that shows the dome. The dome-ordering test excludes this one grid step. |
| A-18 | No Input Configuration (IC) could be saved or loaded, the CSV export carried no configuration, and the export file names had no application id, version or time stamp. There was no Theory & Method, no verification dialog with criteria and no About dialog with licence terms of the family. | — | IC schema 1 (transactional load, explicit migrations, unit suffixes; schema 2 since v1.1.0), CSV with # metadata and the full IC as one line, file names AntraSIM-0050_HS_DiagramSimulator_<kind>_<time>.<ext>, this document, the verification suite (T1–T24) and the About & Licence dialog (T16, T17). |
| A-19 | Curves whose end points lie far outside the plotting window were dropped instead of clipped: the dome part of a low-pressure isobar is one straight segment from the saturated liquid (s = 0.5 kJ/(kg·K) at 0.05 bar) to the saturated vapour, and when the axis range was narrowed (buttons “Mollier” and “Wet steam”, then a higher s min and h min) the point outside the window was discarded together with the whole segment, so the isobars disappeared in the wet-steam region. Any other curve with a segment that ends far outside the window is affected in the same way. The drawing routine of v1.0.0 discards points more than 2000 px outside the window; the version delivered as 1.0.1 used 1500 px. | In the window 5.5 … 9 kJ/(kg·K) × 1800 … 3000 kJ/kg the dome parts of the low-pressure isobars vanished (see the reproduction in the delivery note). | Segment-wise clipping of every curve to the window (Liang–Barsky), also for the placement of the isoline labels; the root cause is the filter that removed every point outside a fixed margin, together with the segment that starts or ends at it. Test T23 checks 520 curve × window combinations: no curve that crosses the window is dropped, no point lies outside it. |
3. Governing Equations
Intuition IAPWS-IF97 covers the fluid states of water by four equations that join at agreed boundaries: compressed liquid (region 1), vapour (region 2), the dense near-critical fluid (region 3) and the saturation line (region 4). Each basic equation is a single “master function” from which every thermodynamic property follows by differentiation.
Mathematical formulation Region 1 (liquid) is a Gibbs free energy in dimensionless form, with π = p/16.53 MPa and τ = 1386 K/T (34 terms, coefficients ni, Ii, Ji of the release):
Properties follow from γ and its derivatives (subscripts denote partial derivatives), with R = 0.461526 kJ/(kg·K):
Region 2 (vapour) is the sum of an ideal-gas part and a residual part with π = p/1 MPa and τ = 540 K/T (9 and 43 terms):
with the same property relations as in region 1 (γπ = 1/π + γrπ). Region 3 is a Helmholtz free energy in density and temperature, with δ = ρ/ρc (ρc = 322 kg/m³) and τ = Tc/T (Tc = 647.096 K):
Region 4 is the saturation line. With ϑ = T + n9/(T − n10), A = ϑ² + n1ϑ + n2, B = n3ϑ² + n4ϑ + n5 and C = n6ϑ² + n7ϑ + n8 (temperature in K, pressure in MPa):
The inverse Ts(p) is the closed-form solution of the same quadratic. The boundary between regions 2 and 3 above 623.15 K is the B23 line:
Inside the dome a state is a mixture of the saturated liquid (subscript f) and saturated vapour (subscript g) at the same ps and T; any specific property y ∈ {v, h, s, u} obeys the lever rule:
| Region | Temperature | Pressure | Equation |
| 1 compressed liquid | 273.15 K … 623.15 K | ps(T) … 100 MPa | Gibbs, γ(π, τ) |
| 2 vapour | 273.15 K … 1073.15 K | up to ps(T), pB23(T) or 100 MPa | Gibbs, γ° + γr |
| 3 near-critical | 623.15 K … B23 line | B23 line … 100 MPa | Helmholtz, φ(δ, τ) |
| 4 saturation | 273.15 K … Tc | ps(T) | quadratic in ϑ |
| 5 high temperature | 1073.15 K … 2273.15 K | up to 50 MPa | not implemented |
Process interpretation For steady flow with negligible kinetic and potential energy the first law per unit mass is q − w = Δh, where w is the work delivered by the fluid. An adiabatic machine has w = −Δh, a throttle Δh = 0, an isobaric heat exchanger q = Δh. Isentropic efficiencies are η = Δh/Δhs for a turbine and η = Δhs/Δh for a pump or compressor, with Δhs from the isentropic end state at the exit pressure.
Engineering interpretation The coordinates (s, h) of every plotted curve come from these equations only; nothing is fitted to the picture. Assumptions and limitations The coefficient tables are those of the release and are not reproduced here; see §9 and §11 for their evidence class.
4. Inputs and Operating Conditions
State definition A state point is entered in one of seven bases; the solver of Table 4.1 completes the state. A click in the diagram creates a point in the basis (h, s) — the coordinates of the plot — and dragging a marker keeps this basis. Values are typed in the units of the field; a decimal comma, exponent notation and the Unicode minus sign are accepted.
Table 4.1 — State bases, field limits and solvers.
| Basis | Value 1 | Value 2 | Solver |
|---|
| p, T | p 1e-4 … 1000 bar | T 0 … 800 °C | direct (region selection by T and the saturation and B23 lines) |
| p, x | p as above | x 0 … 1 | saturation + lever rule (p below pc) |
| p, h | p as above | h −10 … 4500 kJ/kg | dome test, then bisection in T |
| p, s | p as above | s −1 … 15 kJ/(kg·K) | dome test, then bisection in T |
| T, x | T 0 … 800 °C | x 0 … 1 | saturation + lever rule (T up to Tc) |
| T, s | T 0 … 800 °C | s −1 … 15 kJ/(kg·K) | dome test, then scan and bisection in p (not unique below about 4 °C, A-6) |
| h, s | h −10 … 4500 kJ/kg | s −1 … 15 kJ/(kg·K) | nested search in ln p (pressure weakly determined in compressed liquid, A-14) |
Limits are those of the fields; a state outside the IAPWS-IF97 range is rejected with a message. Up to 200 points in up to 12 process paths; point names 1–16 characters, path names 1–48 characters. The points of a path are ordered: segment i connects point i to point i + 1 of the same path (a loop is not closed automatically; a cycle is closed by repeating its first point). There is never a segment between two paths.
Display inputs Axis range (h −1000 … 6000 kJ/kg, s −2 … 20 kJ/(kg·K), spans ≥ 10 kJ/kg and ≥ 0.1 kJ/(kg·K)), the layers, the isobar list (≤ 40 entries, 0.005 … 1000 bar), the isotherm list (≤ 40 entries, 0.01 … 800 °C) and the isochore list (≤ 40 entries, 1e-4 … 1e4 m³/kg). Invalid input is marked with text and aria-invalid, never triggers a calculation, and the last valid diagram stays visible. Isotherms are drawn in the single-phase regions only; inside the dome an isotherm is the isobar of the same temperature.
Input Configuration (IC) and CSV The settings file (“Export settings” and “Import settings”; an Input Configuration, IC) is a JSON file (format “AntraSIM-input-configuration”, schemaVersion 2, application id AntraSIM-0050) with unit suffixes in every key (enthalpyMin_kJ_per_kg, entropyMax_kJ_per_kgK, temperatures_C, …). It stores the layers, the axis range (with the name of the preset, Standard, Mollier, Wet steam or Critical, when the range equals one), the isobar, isotherm and isochore lists, the add-point inputs and paths: for every path its name, color (#rrggbb), lineStyle (solid, dashed or dotted), visible and the ordered statePoints (basis and two values, not the derived states), followed by activePath (the selected path, or null) and drawing (whether the next point extends it). Loading is all-or-nothing, including the resolution of every point and the check of every path; a rejected file changes nothing and the message names the reasons. Schema 1 (versions 1.0.x: one list of state points) is converted to a single path named “Path 1”; missing optional fields (colour, line style, visibility, selected path, drawing state) get defaults. The process examples of §6 do not change the schema. The CSV is semicolon-separated with ASCII column names name;basis;value1;value2;h [kJ/kg];…;region;path (the last column names the path), # metadata lines and the full IC as one # line; on import name, basis, the two values and the path name are read (comma or semicolon delimiter, decimal comma with semicolons), files written by v1.0.x are accepted (also files with only h and s columns). The points are appended: every path name in the file creates a new path (an existing name gets the suffix “(2)”), rows without a path name extend the path in progress or form one new path, and the whole file is rejected on any error.
Process paths A path is drawn by clicking in the diagram, by “Add point by state” or by pressing New path. While a path is in progress every new point extends it; Finish path ends it, and the next point then starts a new path with a new colour, so that two paths can never be joined by accident. The list “Process paths” names the path in progress, selects a path (its segments and cycle totals appear in the right-hand panel and its line is drawn thicker), continues drawing a finished path (✎), hides or shows it, changes its line style and deletes it; a path is renamed in place and coloured with the colour field. A single point is deleted in the state-point table, all paths by “Delete all paths” (the axis range, the layers and the isoline lists stay). Hidden paths are neither drawn nor hit by the pointer; a PNG export contains every visible path, its points and a legend. Selecting a point of another path selects that path and ends the drawing of the previous one.
Reference configuration Layers as in v1.0.0 (isochores off), axis 0 … 4000 kJ/kg and 0 … 9.5 kJ/(kg·K), the isotherm and isochore defaults of v1.0.0 and the isobar default of v1.0.0 with 0.2 bar and 2 bar added (18 entries), an empty point list. “Restore defaults” restores all of it. The axis presets of v1.0.0 (Standard, Mollier, Wet steam, Critical) are kept. The Rankine demo and the process examples of §6 are not part of the reference configuration; loading one replaces the state points and the axis range and makes the configuration “modified”.
5. Calculated Quantities
State properties T, p, x, h, s, u, v, ρ = 1/v, cp (regions 1 and 2 only), Tsat(p) and the region. Enthalpy and entropy use the reference of the release (saturated liquid at the triple point: u = s = 0).
Segment classification A segment between two points is classified from Δs, Δp, ΔT and Δh with the tolerances |Δs| < 5e-3 kJ/(kg·K), |Δp|/pmax < 3e-3, |ΔT| < 0.15 K, |Δh| < 0.5 kJ/kg (assumptions, §9): no change, isentropic, isenthalpic (throttling), isobaric + isothermal (phase change), isobaric, isothermal, otherwise polytropic. Isentropic segments are vertical lines; if “True process paths” is on, isenthalpic, isobaric and isothermal segments follow the horizontal line of constant enthalpy through the intermediate pressures, the isobar (through Δh at constant p) or the isotherm; a polytropic segment is a straight line in the diagram, not a real process path.
Cycle totals Over all segments of the selected path: isobaric segments carry heat (qin for Δh > 0, qout otherwise); every other non-throttling segment carries work (wout for Δh < 0, win otherwise); wnet = wout − win and ηth = wnet/qin. For a closed loop the first law requires qin − qout = wnet; this is a verified invariant (T14, T21). For open chains the totals have no meaning; the examples of §6 that are single processes say so in the Messages panel.
Table 5.1 — Rankine demo (0.05 bar, 70 bar, 500 °C, turbine ηis = 0.88, isentropic pump), generated from the code.
| Point | Basis | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Reg | Segment to next point |
|---|
| 1 | p, x | 32.8755 | 0.05 | 0.0000 | 137.77 | 0.4763 | 4 | isentropic |
| 2 | p, s | 33.0459 | 70 | – | 144.79 | 0.4763 | 1 | isobaric |
| 3 | p, T | 500.0000 | 70 | – | 3411.25 | 6.7997 | 2 | polytropic |
| 4 | p, h | 32.8755 | 0.05 | 0.8649 | 2233.50 | 7.3245 | 4 | isobaric + isothermal (phase change) |
| 1′ | p, x | 32.8755 | 0.05 | 0.0000 | 137.77 | 0.4763 | 4 | — |
Engineering interpretation The demo gives wnet = 1170.7 kJ/kg, qin = 3266.5 kJ/kg and ηth = 35.84 % for a plain subcritical Rankine cycle, with an exhaust quality of 0.865. The turbine drop is the vertical distance between points 3 and 4, the pump step 1→2 is almost invisible on the diagram.
6. Process Examples
Intuition An h–s diagram becomes useful when you read a whole process in it. The twelve examples below are ready-made chains of state points (one process path each, two paths in 6.12) that can be loaded from Process examples in the left panel. Each one isolates one idea: how a turbine expansion line and its isentropic efficiency look in the diagram, how a Rankine cycle and its reheat variant are drawn with vertical distances as work and heat, why pumping a liquid costs so much less than compressing a vapour, why several stages recover more than one, how wetness develops in a wet-steam expansion, why a supercritical boiler has no boiling line, how a throttling calorimeter measures wetness, what a turbine bypass costs, how a geothermal flash produces steam from hot water, where hot water starts to boil when it is suddenly depressurised, and how two throttling processes from different pressures end at very different outlet temperatures (6.12, the only example with two independent paths). Loading an example replaces all paths and the axis range; the layers, isoline sets and add-point inputs are kept and the IC schema (2) is not changed by the examples. Every point remains editable in the table (§4), so each example is also a starting point for “what if” changes.
Physical mechanism Three relations are used in every example. Along any reversible path the fundamental relation dh = T ds + v dp (§1) ties the diagram to the enthalpy change; the steady-flow first law q − w = Δh (§3) turns enthalpy differences into heat and work; and the second law says that entropy can only be generated, never destroyed.
work out (move down along an isentrope)→irreversibility (drift to the right)→heat added (move up along an isobar)→heat rejected (move down along the condenser isobar)
Mathematical formulation Special cases of the fundamental relation and the second law, with the symbols of §3:
Here sgen is the entropy generated per kg [kJ/(kg·K)] and ed the exergy destroyed per kg [kJ/kg] for an ambient temperature T0; T0 = 298.15 K is used wherever a number is quoted (an assumption). The real machines are described by isentropic efficiencies; for an expansion the actual end enthalpy follows from the isentropic one, whose state is found from the same entropy at the exit pressure:
The turbine examples use ηis = 0.88 (0.85 per stage in 6.5). Inside the dome the state is fixed by the enthalpy through the lever rule of §3, x = (h − hf)/(hg − hf). Assumptions and limitations Steady flow, no kinetic or potential energy, no pressure drop in heat exchangers, no heat loss; all numbers are illustrations from the solvers of §7, not plant data. The cycle totals of the right-hand panel are meaningful only for the closed cycles (6.2, 6.3, 6.4); the other examples are single processes or chains and say so in the Messages panel. The segments and the totals in the right-hand panel always belong to the selected path. Two families are deliberately not included because the diagram represents one stream only: a turbine with moisture separator and feedwater preheaters (bled and mixed streams) and a two-stream steam generator; they are left for a later version.
How to explore The points are independent inputs: editing one point does not move the others. When a change should propagate (for example a new turbine efficiency), the dependent point must be edited as well. The recipe for an expansion end state is: add a point with basis (p, s) at the exit pressure and the entropy of the inlet, read its enthalpy hout,s in the Selected-state panel, compute hout with the equation above and enter it as the value of the exit point (basis p, h). The segment panel then reports the isentropic efficiency of the step as a check; in the h–s plane it is the ratio of the two vertical distances that are drawn.
6.1 Steam turbine expansion line
Intuition Steam that expands in a turbine gives off enthalpy as work. An ideal turbine would move the state straight down along a vertical line; a real one ends higher and to the right, because friction and mixing generate entropy and turn part of the work back into heat. The whole idea of the isentropic efficiency is visible as two vertical distances.
Physical mechanism Steam of 40 bar and 450 °C (1) expands adiabatically to 5 bar. The isentropic end state 2s has the entropy of the inlet; the actual end state 2 lies on the same 5 bar isobar at a higher enthalpy. The chord 1→2 is a straight line in the diagram, not the real path of the steam; the real path is unknown between the end points, only the end points are fixed.
Table 6.1 — Points of the turbine example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, T | 40 | 450 | 450.00 | 40 | – | 3330.99 | 6.9383 | polytropic |
| 2 | p, h | 5 | 2863.22 | 203.42 | 5 | – | 2863.22 | 7.0765 | isobaric |
| 2s | p, s | 5 | 6.93833 | 174.13 | 5 | – | 2799.43 | 6.9383 | isentropic |
| 1′ | p, T | 40 | 450 | 450.00 | 40 | – | 3330.99 | 6.9383 | — |
Mathematical formulation The isentropic efficiency of a turbine and the entropy generated by the expansion:
Engineering interpretation The isentropic drop is Δhs = 531.56 kJ/kg (vertical distance 1→2s), the actual drop Δh = 467.77 kJ/kg, so ηis = 0.8800. The exhaust is superheated at 203.4 °C, the entropy generated is 0.1382 kJ/(kg·K) and the exergy destroyed 41.2 kJ/kg. The lost part of the isentropic drop, 63.79 kJ/kg, is the vertical distance 2s→2 along the exit isobar; it is not lost as energy but returned to the steam as internal heat.
Table 6.2 — Effect of the isentropic efficiency (40 bar / 450 °C to 5 bar), generated from the code.
| ηis [–] | Δh [kJ/kg] | h2 [kJ/kg] | T2 [°C] | sgen [kJ/(kg·K)] | ed [kJ/kg] |
|---|
| 0.80 | 425.2 | 2905.7 | 223.5 | 0.2256 | 67.3 |
| 0.85 | 451.8 | 2879.2 | 210.9 | 0.1714 | 51.1 |
| 0.88 | 467.8 | 2863.2 | 203.4 | 0.1382 | 41.2 |
| 0.92 | 489.0 | 2842.0 | 193.5 | 0.0931 | 27.8 |
| 1.00 | 531.6 | 2799.4 | 174.1 | −0.0000 | −0.0 |
Try this Set point 2 to basis (p, h) with 5 bar and 2905.7 kJ/kg (ηis = 0.80): the segment panel reports 80 % and the point moves to the right, further from the isentrope. Assumptions and limitations Adiabatic, steady, one stream; the efficiency is an input, not a result of a blade model.
6.2 Rankine cycle
Intuition The steam cycle in the Mollier diagram has a very simple reading: the pump is a tiny vertical step, the boiler a long climb up the boiler isobar, the turbine a long drop that leans to the right, and the condenser a short slide down the condenser isobar. Heat and work are all vertical distances.
Physical mechanism The condensate (1, saturated liquid at 0.05 bar) is pumped almost without heating (2). The boiler heats it at 100 bar through boiling to steam of 500 °C (3), the turbine expands it adiabatically with ηis = 0.88 to the condenser pressure (4), and the condenser removes heat at constant pressure and temperature until the liquid is saturated again (1′ = 1).
Table 6.3 — Points of the Rankine example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, x | 0.05 | 0 | 32.88 | 0.05 | 0.0000 | 137.77 | 0.4763 | isentropic |
| 2 | p, s | 100 | 0.476254 | 33.12 | 100 | – | 147.79 | 0.4763 | isobaric |
| 3 | p, T | 100 | 500 | 500.00 | 100 | – | 3375.06 | 6.5993 | polytropic |
| 4 | p, h | 0.05 | 2175.19 | 32.88 | 0.05 | 0.8409 | 2175.19 | 7.1340 | isobaric + isothermal (phase change) |
| 1′ | p, x | 0.05 | 0 | 32.88 | 0.05 | 0.0000 | 137.77 | 0.4763 | — |
Mathematical formulation Pump work follows from the fundamental relation with a constant specific volume of the liquid; heat and work of the other steps follow from the first law. Because the boiler process is isobaric, the heat added can also be written as an integral over the entropy, and the mean temperature of heat addition is the slope of the chord 2→3:
Engineering interpretation The pump takes 10.03 kJ/kg (the approximation v1Δp gives 10.05 kJ/kg), the turbine delivers 1199.9 kJ/kg, the boiler needs 3227.3 kJ/kg and the condenser rejects 2037.4 kJ/kg: wnet = 1189.8 kJ/kg and ηth = 36.87 %. The exhaust quality is 0.841. The mean temperature of heat addition is only 253.9 °C, although the steam leaves the boiler at 500 °C; the liquid is heated at rising temperature (2→3 starts at 33.1 °C). With the condenser at 32.9 °C the Carnot efficiency between these two mean temperatures would be 41.94 %; the remainder is mostly the loss from turbine irreversibility.
Table 6.4 — Effect of the boiler pressure (500 °C, 0.05 bar, ηis = 0.88), generated from the code.
| pboiler [bar] | ηth [%] | wnet [kJ/kg] | xexhaust [–] |
|---|
| 40 | 34.06 | 1125.5 | 0.8991 |
| 70 | 35.84 | 1170.7 | 0.8649 |
| 100 | 36.87 | 1189.8 | 0.8409 |
| 150 | 37.87 | 1195.9 | 0.8097 |
| 200 | 38.41 | 1184.4 | 0.7837 |
Higher boiler pressure raises the efficiency (a higher mean temperature of heat addition) and dries the exhaust less: the exhaust gets wetter, which is the reason for reheat (6.4).
Table 6.5 — Effect of the boiler temperature (100 bar, 0.05 bar, ηis = 0.88), generated from the code.
| Tboiler [°C] | ηth [%] | wnet [kJ/kg] | xexhaust [–] |
|---|
| 400 | 35.57 | 1049.2 | 0.7843 |
| 450 | 36.22 | 1120.8 | 0.8146 |
| 500 | 36.87 | 1189.8 | 0.8409 |
| 550 | 37.53 | 1258.6 | 0.8648 |
| 600 | 38.19 | 1328.3 | 0.8872 |
Try this Change point 3 to 550 °C, add a point (p, s) at 0.05 bar with the entropy of point 3, and set point 4 by the recipe of the introduction; the cycle totals then reproduce the 550 °C row of Table 6.5. Assumptions and limitations No pressure drop, no feed heating, isentropic pump; single-stage expansion with a constant efficiency.
6.3 Pump work against compressor work
Intuition Why do power plants condense the steam before raising the pressure? Because raising the pressure of a liquid is cheap and raising the pressure of a vapour is expensive. In the diagram the two steps have the same form, a vertical line, but very different lengths.
Physical mechanism Along an isentrope the enthalpy change is ∫v dp. A liquid has a specific volume of about 1 litre per kg and hardly changes it under compression; a vapour at 1 bar occupies about 1.7 m³/kg. The example is an ideal cycle between 1 bar and 20 bar: the pump lifts saturated liquid (1→2), the boiler heats it at 20 bar to the entropy of saturated vapour at 1 bar (2→3), the isentropic expansion 3→4 is the same vertical line that a compressor would have to climb backwards, and the condenser closes the cycle.
Table 6.6 — Points of the pump example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, x | 1 | 0 | 99.61 | 1 | 0.0000 | 417.44 | 1.3026 | isentropic |
| 2 | p, s | 20 | 1.30256 | 99.74 | 20 | – | 419.42 | 1.3026 | isobaric |
| 3 | p, s | 20 | 7.35881 | 474.24 | 20 | – | 3411.33 | 7.3588 | isentropic |
| 4 | p, x | 1 | 1 | 99.61 | 1 | 1.0000 | 2674.95 | 7.3588 | isobaric + isothermal (phase change) |
| 1′ | p, x | 1 | 0 | 99.61 | 1 | 0.0000 | 417.44 | 1.3026 | — |
Mathematical formulation With v1 and v4 the specific volumes of saturated liquid and saturated vapour at 1 bar:
Engineering interpretation The pump needs 1.98 kJ/kg (v1Δp = 1.98 kJ/kg); compressing the same mass as vapour along 4→3 takes 736.4 kJ/kg, 372 times as much. The ratio is smaller than v4/v1 = 1624 because the vapour volume shrinks during compression. The cycle as a whole reaches ηth = 24.55 % and its back-work ratio is only 0.27 %. The result explains why the steam cycle condenses before it pumps and why a gas cycle, which compresses a gas, gives away a large part of its turbine work.
Try this Change the pressure of points 2 and 3 to 40 bar (basis p, s): the pump step grows in proportion to Δp, the vapour step grows less than proportionally, and the ratio falls. Assumptions and limitations Ideal machines; the cycle is not a plant proposal (the turbine exhausts to a state that is not the condenser state of an ordinary plant).
6.4 Rankine cycle with reheat
Intuition Expanding steam in a turbine moves the state down and slightly to the right; if the pressure is high, the state ends in the wet region, where droplets erode the blades. Reheat takes the steam out of the turbine part-way, heats it again to the original temperature and returns it: the second expansion starts far from the dome and ends much drier.
Physical mechanism The condensate (1) is pumped to 160 bar (2), heated to 540 °C (3) and expanded in the high-pressure turbine to 40 bar (4). The reheater heats the steam at constant pressure back to 540 °C (5), the low-pressure turbine expands it to 0.05 bar (6) and the condenser closes the cycle. In the diagram the reheater is a second climb along an isobar; the two turbine steps are two separate leaning lines.
Table 6.7 — Points of the reheat example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, x | 0.05 | 0 | 32.88 | 0.05 | 0.0000 | 137.77 | 0.4763 | isentropic |
| 2 | p, s | 160 | 0.476254 | 33.27 | 160 | – | 153.79 | 0.4763 | isobaric |
| 3 | p, T | 160 | 540 | 540.00 | 160 | – | 3412.12 | 6.4494 | polytropic |
| 4 | p, h | 40 | 3059.52 | 336.62 | 40 | – | 3059.52 | 6.5294 | isobaric |
| 5 | p, T | 40 | 540 | 540.00 | 40 | – | 3537.34 | 7.2073 | polytropic |
| 6 | p, h | 0.05 | 2358.39 | 32.88 | 0.05 | 0.9165 | 2358.39 | 7.7326 | isobaric + isothermal (phase change) |
| 1′ | p, x | 0.05 | 0 | 32.88 | 0.05 | 0.0000 | 137.77 | 0.4763 | — |
Mathematical formulation Heat and work are sums over the two expansions and the two heat additions:
Engineering interpretation The exhaust quality is 0.9165 against 0.8260 without reheat; the efficiency is 40.56 % against 38.57 %, and wnet = 1515.5 kJ/kg. The efficiency gain is small compared with the drier exhaust, which is the main reason for reheat; it comes from adding part of the heat at a higher mean temperature.
Table 6.8 — Effect of the reheat pressure (boiler 160 bar / 540 °C, reheat to 540 °C, 0.05 bar, ηis = 0.88), generated from the code.
| preheat [bar] | ηth [%] | wnet [kJ/kg] | xexhaust [–] |
|---|
| none | 38.57 | 1256.8 | 0.8260 |
| 5 | 39.82 | 1648.7 | superheated |
| 10 | 40.29 | 1621.6 | 0.9920 |
| 20 | 40.59 | 1581.0 | 0.9550 |
| 40 | 40.56 | 1515.5 | 0.9165 |
| 60 | 40.32 | 1461.3 | 0.8927 |
| 80 | 40.01 | 1413.7 | 0.8748 |
The efficiency has a flat maximum at an intermediate reheat pressure (here at 20 bar in the tested set); a high reheat pressure leaves little steam to reheat, a low one returns too little of the heat at high temperature. Try this Change points 4 and 5 to a reheat pressure of 20 bar (point 4 by the recipe of the introduction, point 5 as (p, T) = 20 bar, 540 °C) and compare the totals with the row of Table 6.8. Assumptions and limitations No pressure drop in the reheater and its piping, isentropic pump, the same efficiency for both turbines.
6.5 Reheat factor of a multistage turbine
Intuition A multistage turbine with a stage efficiency of 85 % is more efficient as a whole than 85 %. The heat that a stage turns back into the steam through friction is not lost: the next stage expands the warmer steam and gets a little of it back as work.
Physical mechanism Constant-pressure lines fan out in the h–s plane: the vertical distance between two given isobars is larger at a larger entropy, because (∂h/∂p)s = v and the steam is more voluminous when it is warmer. Each stage ends to the right of the isentrope of its inlet, so the next stage starts where the isobars are further apart and has a larger isentropic drop available. The example has four stages of 85 % between 100 bar / 540 °C and 0.05 bar (exit pressures 15, 2, 0.3 and 0.05 bar). Point 5s is the isentropic end state of the whole expansion.
Table 6.9 — Points of the reheat-factor example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, T | 100 | 540 | 540.00 | 100 | – | 3476.87 | 6.7277 | polytropic |
| 2 | p, h | 15 | 3014.31 | 289.28 | 15 | – | 3014.31 | 6.8777 | polytropic |
| 3 | p, h | 2 | 2669.14 | 120.21 | 2 | 0.9831 | 2669.14 | 7.0325 | polytropic |
| 4 | p, h | 0.3 | 2417.45 | 69.10 | 0.3 | 0.9113 | 2417.45 | 7.1623 | polytropic |
| 5 | p, h | 0.05 | 2218.9 | 32.88 | 0.05 | 0.8589 | 2218.90 | 7.2768 | isobaric + isothermal (phase change) |
| 5s | p, s | 0.05 | 6.72773 | 32.88 | 0.05 | 0.7896 | 2050.87 | 6.7277 | isentropic |
| 1′ | p, T | 100 | 540 | 540.00 | 100 | – | 3476.87 | 6.7277 | — |
Mathematical formulation With Δhs,i the isentropic drop of stage i from its own inlet state and Δhs the isentropic drop of the whole expansion:
Engineering interpretation The overall isentropic drop (vertical distance 1→5s) is 1426.0 kJ/kg; the stage drops add up to 1480.0 kJ/kg, so RF = 1.0378 and the overall efficiency is 0.8822 against the stage efficiency 0.85. The exhaust quality is 0.8589.
Table 6.10 — Effect of the number of stages (equal pressure ratio per stage, 100 bar / 540 °C to 0.05 bar, ηis = 0.85 per stage), generated from the code.
| Stages | RF [–] | ηo [%] | xexhaust [–] |
|---|
| 1 | 1.0000 | 85.00 | 0.8778 |
| 2 | 1.0219 | 86.86 | 0.8669 |
| 4 | 1.0379 | 88.22 | 0.8589 |
| 8 | 1.0457 | 88.88 | 0.8550 |
| 16 | 1.0495 | 89.20 | 0.8531 |
One stage has RF = 1 by definition; the factor grows with the number of stages and saturates. Try this Move point 3 to a different pressure (recipe of the introduction) and read the stage efficiencies in the segment panel: they stay at 0.85 while the overall Δh/Δhs does not. Assumptions and limitations Equal stage efficiency, no bleed, no leaving loss; the cycle totals do not apply.
6.6 Wet-steam expansion
Intuition Steam that starts as saturated vapour and expands in a turbine immediately enters the two-phase region: it condenses while it expands. The quality lines cut across the expansion line and show how wet the steam becomes.
Physical mechanism Saturated vapour of 70 bar (1) expands to 0.05 bar with ηis = 0.88 (2). Point 3 is saturated vapour at the exhaust pressure, the state that a separator and a reheater would have to reach; the distance 2→3 is the drying that has not taken place. The friction of the real expansion generates heat that evaporates part of the liquid, so the actual exhaust (2) is drier than the isentropic one.
Table 6.11 — Points of the wet-steam example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, x | 70 | 1 | 285.83 | 70 | 1.0000 | 2772.57 | 5.8146 | polytropic |
| 2 | p, h | 0.05 | 1891.58 | 32.88 | 0.05 | 0.7238 | 1891.58 | 6.2072 | isobaric + isothermal (phase change) |
| 3 | p, x | 0.05 | 1 | 32.88 | 0.05 | 1.0000 | 2560.77 | 8.3939 | — |
Mathematical formulation The quality at the exhaust follows from the lever rule at the exhaust pressure with the enthalpy of the actual end state:
Engineering interpretation The turbine drop is 881.0 kJ/kg; the exhaust quality is 0.7238 (27.6 % liquid by mass), against 0.6742 for the isentropic expansion. A moisture content of this size is far beyond what a steam turbine blade tolerates (values of the order of 10–15 % are often quoted as the limit; a rule of thumb that is not modelled here), which is why saturated-steam turbines use moisture separators between stages.
Table 6.12 — Exhaust quality as a function of the isentropic efficiency (saturated vapour 70 bar to 0.05 bar), generated from the code.
| ηis [–] | xexhaust [–] | moisture [%] |
|---|
| 0.80 | 0.7569 | 24.3 |
| 0.88 | 0.7238 | 27.6 |
| 0.95 | 0.6949 | 30.5 |
| 1.00 | 0.6742 | 32.6 |
Try this Set point 2 to (p, h) = 0.05 bar with the enthalpy of another ηis and watch the quality in the Selected-state panel. Assumptions and limitations Equilibrium two-phase states; droplet lag and subcooling of the vapour in a real turbine are not represented; cycle totals do not apply.
6.7 Supercritical boiler
Intuition Above the critical pressure (220.64 bar) water never boils: as it is heated, its density falls continuously and it turns from liquid-like to gas-like without a plateau. In the h–s diagram the isobar has no straight section inside the dome, because it never enters it.
Physical mechanism Heating at 250 bar from 300 °C (1) to 600 °C (4) passes the pseudo-critical temperature (2), where the specific heat has a sharp maximum. The specific volume rises from 0.00135 to 0.0141 m³/kg along the way. The enthalpy still changes smoothly, but in a narrow temperature range it changes fast.
Table 6.13 — Points of the supercritical example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, T | 250 | 300 | 300.00 | 250 | – | 1331.06 | 3.1915 | isobaric |
| 2 | p, T | 250 | 384.87 | 384.87 | 250 | – | 2151.21 | 4.4955 | isobaric |
| 3 | p, T | 250 | 500 | 500.00 | 250 | – | 3165.92 | 5.9642 | isobaric |
| 4 | p, T | 250 | 600 | 600.00 | 250 | – | 3493.69 | 6.3638 | — |
Mathematical formulation Because the process is isobaric, the heat added is the enthalpy difference and can also be written with the entropy; the pseudo-critical temperature is the maximum of the specific heat:
Engineering interpretation The heat added is 2162.6 kJ/kg at a mean temperature of 408.6 °C; the pseudo-critical point of 250 bar lies at 384.87 °C, where ∂h/∂T = 71.1 kJ/(kg·K). Table 6.14 shows how the maximum flattens and moves with pressure; Table 6.15 counts the two-phase states met by a scan of the isobar between 300 °C and 600 °C: below the critical pressure the isobar crosses the dome, above it never.
Table 6.14 — Pseudo-critical temperature and maximum of ∂h/∂T, generated from the code.
| p [bar] | Tpc [°C] | (∂h/∂T)max [kJ/(kg·K)] |
|---|
| 250 | 384.87 | 71.1 |
| 300 | 402.07 | 26.7 |
| 400 | 431.33 | 13.2 |
Table 6.15 — Two-phase states met by a scan of 301 states on the isobar between 300 °C and 600 °C, generated from the code.
| p [bar] | crosses the dome | two-phase states |
|---|
| 150 | yes | 134 |
| 200 | yes | 79 |
| 250 | no | 0 |
| 300 | no | 0 |
Try this Change all four points to 150 bar: the boiling line appears as a straight section of the isobar and the cycle-like reading of the heat addition changes from a curve to a chord with a plateau. Assumptions and limitations The states lie in regions 1, 2 and 3; cp is not provided in region 3 and is obtained by a central difference of the enthalpy (0.01 K); the cycle totals do not apply.
6.8 Throttling calorimeter
Intuition You cannot see how wet steam in a pipe is. A throttling calorimeter measures it by letting a small sample of the steam expand through a valve into the atmosphere: if the steam is only slightly wet, it comes out dry and even superheated, and its temperature tells the wetness.
Physical mechanism Throttling in a well-insulated valve does no work and exchanges no heat, so the enthalpy is conserved: the state moves horizontally to the right (1→2), and the entropy rises because the process is irreversible. The wet steam of 10 bar (1, x = 0.97) ends at 1 bar with a temperature above the saturation temperature (2). The distance 2→3 down to the saturated-vapour line is the superheat that proves that the state is measurable.
Table 6.16 — Points of the calorimeter example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, x | 10 | 0.97 | 179.89 | 10 | 0.9700 | 2716.69 | 6.4516 | isenthalpic (throttling) |
| 2 | p, h | 1 | 2716.69 | 120.04 | 1 | – | 2716.69 | 7.4678 | isobaric |
| 3 | p, x | 1 | 1 | 99.61 | 1 | 1.0000 | 2674.95 | 7.3588 | — |
Mathematical formulation The energy balance q − w = Δh with q = w = 0 gives constant enthalpy; the wetness follows from the lever rule at the upstream pressure:
Engineering interpretation For steam of 10 bar (hf = 762.7 kJ/kg, hg = 2777.1 kJ/kg) and x = 0.97 the enthalpy is 2716.7 kJ/kg. After the valve the steam has 120.04 °C, 20.4 K above the saturation temperature of 1 bar (99.61 °C). The method fails when the steam is so wet that the throttled state is still saturated: the lower limit is x = 0.9493 for these pressures.
Table 6.17 — Wetness read from the temperature after the valve (10 bar → 1 bar), generated from the code.
| x1 [–] | h [kJ/kg] | T2 [°C] | superheat [K] |
|---|
| 0.90 | 2575.7 | 99.61 | 0.0 |
| 0.94 | 2656.3 | 99.61 | 0.0 |
| 0.97 | 2716.7 | 120.04 | 20.4 |
| 0.99 | 2757.0 | 140.14 | 40.5 |
Try this Change point 1 to x = 0.94 and read its enthalpy in the Selected-state panel (2656.3 kJ/kg); enter that value for point 2 (basis p, h, 1 bar) and read the temperature (99.61 °C). Assumptions and limitations Adiabatic, negligible kinetic energy; the cycle totals do not apply.
6.9 Turbine bypass and desuperheating
Intuition When a turbine trips, the boiler cannot stop at once. The steam is sent past the turbine through a valve to the condenser. The valve wastes all the work that the turbine would have produced: a long horizontal line in the Mollier diagram, from the high-pressure isobar to the condenser isobar at the same enthalpy.
Physical mechanism Fresh steam of 70 bar / 500 °C (1) is throttled to the condenser pressure of 0.05 bar (2); the enthalpy is unchanged, the pressure drops by a factor 1400 and the temperature by only a few tens of kelvin, because steam at low pressure behaves almost like an ideal gas and an ideal gas does not change its temperature in a throttle. A desuperheater then cools the steam by water injection to saturated vapour (3) and the condenser condenses it (4).
Table 6.18 — Points of the bypass example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, T | 70 | 500 | 500.00 | 70 | – | 3411.25 | 6.7997 | isenthalpic (throttling) |
| 2 | p, h | 0.05 | 3411.25 | 462.95 | 0.05 | – | 3411.25 | 10.1156 | isobaric |
| 3 | p, x | 0.05 | 1 | 32.88 | 0.05 | 1.0000 | 2560.77 | 8.3939 | isobaric + isothermal (phase change) |
| 4 | p, x | 0.05 | 0 | 32.88 | 0.05 | 0.0000 | 137.77 | 0.4763 | — |
Mathematical formulation The valve is isenthalpic and adiabatic; its entropy generation is the horizontal distance 1→2. The mass of injection water per kg of steam follows from an energy balance over the desuperheater, with the injection water taken as saturated liquid at the condenser pressure (assumption):
Engineering interpretation The throttle lowers the temperature only from 500 °C to 463.0 °C, while the entropy grows by 3.316 kJ/(kg·K) and 988.6 kJ/kg of exergy is destroyed; the isentropic drop that a turbine could have used between the same pressures would be 1338.3 kJ/kg. The desuperheater needs 0.351 kg of water (saturated liquid at 32.9 °C, 137.8 kJ/kg) per kg of steam.
Table 6.19 — Effect of the downstream pressure (70 bar / 500 °C, h constant), generated from the code.
| p2 [bar] | T2 [°C] | Δs [kJ/(kg·K)] | ed [kJ/kg] | Δhs [kJ/kg] |
|---|
| 10 | 468.6 | 0.875 | 260.8 | 532.6 |
| 1 | 463.5 | 1.934 | 576.5 | 944.7 |
| 0.05 | 463.0 | 3.316 | 988.6 | 1338.3 |
Try this Change point 2 to another downstream pressure (basis p, h, keep the enthalpy of point 1): the horizontal line is the same, only its end moves. Assumptions and limitations Adiabatic valve, injection water state assumed; the cycle totals do not apply.
6.10 Flash of hot water
Intuition Hot water from a geothermal well is under high pressure and cannot boil. If its pressure is released in a valve, part of it turns to steam: the steam can drive a turbine and the rest, the brine, is separated. The h–s diagram shows the fraction directly, because the mixture lies on a straight line between the two saturated states.
Physical mechanism The well fluid is saturated liquid at 250 °C (1). The flash valve is a throttle, so the state moves horizontally into the dome at the separator pressure of 5 bar (2). The separator splits the mixture into saturated liquid (3) and saturated vapour (4), which lie on the 5 bar isobar on both sides of point 2. In the h–s plane this isobar is a straight line, so point 2 divides it in the ratio of the vapour fraction.
Table 6.20 — Points of the flash example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | T, x | 250 | 0 | 250.00 | 39.759 | 0.0000 | 1085.69 | 2.7934 | isenthalpic (throttling) |
| 2 | p, h | 5 | 1085.69 | 151.84 | 5 | 0.2113 | 1085.69 | 2.9089 | isobaric + isothermal (phase change) |
| 3 | p, x | 5 | 0 | 151.84 | 5 | 0.0000 | 640.19 | 1.8606 | isobaric + isothermal (phase change) |
| 4 | p, x | 5 | 1 | 151.84 | 5 | 1.0000 | 2748.11 | 6.8206 | — |
Mathematical formulation The energy balance across the valve is a mixture balance of the two products; because the isobar inside the dome is straight, the same fraction follows from the entropy (lever rule in both coordinates):
Engineering interpretation Here h1 = 1085.7 kJ/kg, hf(5 bar) = 640.2 kJ/kg and hg(5 bar) = 2748.1 kJ/kg, so x = 0.2113 from the enthalpies and 0.2113 from the entropies: 21.1 % of the well fluid becomes steam at 151.8 °C. The valve generates 0.1155 kJ/(kg·K) of entropy.
Table 6.21 — Effect of the separator pressure (well fluid saturated liquid at 250 °C), generated from the code.
| pseparator [bar] | Tsat [°C] | vapour fraction [–] |
|---|
| 1 | 99.6 | 0.2960 |
| 2 | 120.2 | 0.2639 |
| 5 | 151.8 | 0.2113 |
| 10 | 179.9 | 0.1603 |
| 20 | 212.4 | 0.0937 |
A lower separator pressure gives more steam of lower pressure; the best pressure for a plant depends on the turbine, which the example does not model. Try this Change points 2, 3 and 4 to another separator pressure (2 as (p, h) with the enthalpy of point 1, 3 and 4 as (p, x) with x = 0 and 1) and compare the fraction with Table 6.21. Assumptions and limitations Adiabatic valve and ideal separation; no dissolved gases; the cycle totals do not apply.
6.11 Depressurisation (blowdown) of hot water
Intuition Water at 325 °C and 155 bar (typical of a pressurised-water primary circuit) is liquid, but far hotter than the boiling temperature of the low pressures that it may be released to. When the pressure falls suddenly, the water starts to boil at some pressure and a large part of it flashes to steam.
Physical mechanism With no time for heat exchange and no work, the enthalpy stays constant: the state moves horizontally. Point 1 is the initial state; the horizontal line meets the saturated-liquid line at point 2, where flashing starts; point 3 is the final state at 1 bar inside the dome. The onset pressure lies far below the initial pressure because subcooled liquid can be depressurised a long way before it reaches saturation.
Table 6.22 — Points of the blowdown example (generated from the code).
| Point | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point |
|---|
| 1 | p, T | 155 | 325 | 325.00 | 155 | – | 1484.25 | 3.4758 | isenthalpic (throttling) |
| 2 | p, h | 118.257 | 1484.25 | 323.56 | 118.26 | 0.0000 | 1484.25 | 3.4851 | isenthalpic (throttling) |
| 3 | p, h | 1 | 1484.25 | 99.61 | 1 | 0.4726 | 1484.25 | 4.1645 | — |
Mathematical formulation The onset pressure is the root of the saturated-liquid enthalpy, and the vapour fraction after onset follows from the lever rule:
Engineering interpretation The initial liquid is subcooled by 19.8 K (saturation temperature of 155 bar 344.8 °C); flashing starts at 118.26 bar, where the temperature has fallen to 323.6 °C. At 1 bar the vapour fraction is 0.4726 and the temperature 99.6 °C.
Table 6.23 — Vapour fraction along the isenthalp during the depressurisation, generated from the code.
| p [bar] | T [°C] | x [–] |
|---|
| 155 | 325.0 | – |
| 140 | 324.4 | – |
| 118.26 | 323.6 | 0.0000 |
| 100 | 311.0 | 0.0580 |
| 50 | 263.9 | 0.2011 |
| 10 | 179.9 | 0.3582 |
| 1 | 99.6 | 0.4726 |
Try this Change point 1 to 200 bar and 300 °C, read its enthalpy in the Selected-state panel and enter it for points 2 and 3 (basis p, h): the onset moves to a different pressure. Assumptions and limitations Equilibrium flashing; the delay of boiling (metastable superheated liquid) and choked flow in a real blowdown are not represented; the cycle totals do not apply.
6.12 Throttling comparison: saturated steam from 155 bar and 35 bar to 1 bar
Intuition A throttling valve lets the enthalpy stay where it is and lowers the pressure. Two identical valves that both discharge to 1 bar therefore end on the same horizontal line as their inlet states, and the higher the inlet enthalpy, the higher the outlet temperature. It is tempting to expect that steam from 155 bar leaves hotter than steam from 35 bar because it comes from a higher pressure. The diagram shows why this is wrong: the saturated vapour of 155 bar has less enthalpy than the saturated vapour of 35 bar, so its horizontal line ends closer to the dome.
Physical mechanism The specific enthalpy of saturated vapour has a maximum of 2803.3 kJ/kg near 30.8 bar and falls on both sides of it (Table 6.24a). The saturated vapour of 1 bar has 2674.9 kJ/kg. Saturated vapour of a pressure between 1 bar and about 125 bar has more enthalpy than that and leaves the valve superheated; above it, the steam leaves as wet steam at the saturation temperature of 1 bar. Path 1 (points 1 and 2) starts at 155 bar, path 2 (points 1b and 2b) at 35 bar; the two paths are independent, and no line connects point 2 to point 1b.
Table 6.24 — Points of the throttling comparison (generated from the code); the two paths are separate.
| Point | Path | Basis | Value 1 | Value 2 | T [°C] | p [bar] | x [–] | h [kJ/kg] | s [kJ/(kg·K)] | Segment to next point (within the path) |
|---|
| 1 | 155 bar → 1 bar | p, x | 155 | 1 | 344.79 | 155 | 1.0000 | 2596.22 | 5.2789 | isenthalpic (throttling) |
| 2 | 155 bar → 1 bar | p, h | 1 | 2596.22 | 99.61 | 1 | 0.9651 | 2596.22 | 7.1476 | — |
| 1b | 35 bar → 1 bar | p, x | 35 | 1 | 242.56 | 35 | 1.0000 | 2802.74 | 6.1245 | isenthalpic (throttling) |
| 2b | 35 bar → 1 bar | p, h | 1 | 2802.74 | 163.19 | 1 | – | 2802.74 | 7.6755 | — |
Mathematical formulation Both valves are adiabatic and do no work, so the enthalpy is conserved; the outlet state at 1 bar follows from the inlet enthalpy alone. For a wet outlet the quality follows from the lever rule at 1 bar:
Engineering interpretation From 155 bar the steam leaves as wet steam with x = 0.9651 at 99.61 °C (the entropy generated is 1.869 kJ/(kg·K)); from 35 bar it leaves superheated at 163.2 °C (1.551 kJ/(kg·K)). The outlet temperatures differ by 63.6 K in the opposite direction of the inlet pressures. The same reasoning limits the throttling calorimeter of 6.8 to steam that is not too wet.
Table 6.24a — Saturated vapour throttled to 1 bar as a function of the inlet pressure, generated from the code.
| p1 [bar] | hg(p1) [kJ/kg] | T2 at 1 bar [°C] | State at 1 bar |
|---|
| 10 | 2777.1 | 150.3 | superheated, +50.7 K |
| 20 | 2798.4 | 161.0 | superheated, +61.4 K |
| 35 | 2802.7 | 163.2 | superheated, +63.6 K |
| 60 | 2784.6 | 154.0 | superheated, +54.4 K |
| 100 | 2725.5 | 124.4 | superheated, +24.8 K |
| 155 | 2596.2 | 99.6 | x = 0.9651 |
| 200 | 2411.4 | 99.6 | x = 0.8833 |
How to build it in the application The comparison is loaded from the example list, but it can also be drawn by hand, which is the intended exercise: press New path (or simply click in the diagram), add point 1 as (p, x) = 155 bar, 1 and point 2 as (p, h) = 1 bar with the enthalpy of point 1; press Finish path; add point 1 as (p, x) = 35 bar, 1 and its outlet the same way. The new path starts at once, is coloured differently and is never connected to the first one. Each path can be renamed, hidden, shown, changed in line style or deleted on its own; the whole workspace, with both paths, is saved by Export settings.
Try this Hide path 1 and select path 2 to read its segment data alone; add a third path from 100 bar (Table 6.24a predicts a superheated outlet of 124.4 °C) and compare its outlet with the others. Assumptions and limitations Adiabatic valves, no kinetic energy change; equilibrium states; the cycle totals do not apply.
7. Numerical Method
Approach No time-stepping. Every state is a direct evaluation or a one-dimensional root search on the basic equations; every input change triggers an immediate recalculation. The default isoline set is built in about 20 ms (Node 22, the build machine) and the (h, s) inversion, the solver behind every click and every drag, took on average 1.66 ms per call on a grid of 460 points (median 0.10 ms, 95th percentile 12.5 ms, maximum 14.4 ms; 128 of the points lie inside the range of the release, the others are rejected). The diagram stays responsive while dragging; no worker thread is used. The plot height follows the window height (at least 500 px).
Kernel Power tables replace Math.pow in the region 1, 2 and 3 sums. Region 3 density is found from p(ρ, T) by bracketed bisection with the bracket confined to 0.5 < ρ < 800 kg/m³ (tolerance 1e-10 kg/m³, at most 80 iterations); the equation has a spurious root above about 950 kg/m³, and an unconfined bracket returns a false liquid density. Saturated densities near and above 623.15 K come from the saturation correlations of the supplementary release and are refined against the region-3 equation only while Tc − T > 1 K and within 5 % of the correlation, because the subcritical loop is too flat to refine closer in (A-5, A-17).
Inverse solvers (p, h) and (p, s): at fixed p both increase monotonically with T; the dome is tested first (with a tolerance of 1e-9 relative, A-4), states in the 1 µK gap next to the saturation line are returned at the bracket end (A-16), otherwise 60 bisection steps in T down to 1e-8 K. (T, s): inside the dome the lever rule; outside, a 48-point scan in p (logarithmic on the vapour side) finds the first sign change of s(p) − s, then up to 90 bisection steps. A scan is needed because (∂s/∂p)T = −(∂v/∂T)p changes sign at the density maximum, so s(p) is not monotone for liquid below about 4 °C (A-6). (T, v): dome test, then bisection in ln p. (h, s): nested search in ln p; the inner step is the (p, s) solver, the outer step uses the secant from dh = v dp along an isentrope, with bisection as safeguard, because h rises monotonically with p at fixed s. The result is accepted if its enthalpy agrees with the input within 1e-4 relative + 1e-3 kJ/kg; a state beyond that is outside the range of the release.
Isolines Dome: 251 temperatures on a power law up to Tc − 1 K, then 120 points logarithmic in Tc − T down to 1 mK, so that the nose closes tightly on the critical point. Isobars: 91 points in the liquid, the two saturation end points (the isobar is straight in the dome), 170 points in the vapour (281 points above the critical pressure). Isotherms: 110 pressures in the vapour up to the saturation pressure, a pen lift across the dome, 130 pressures in the liquid (240 pressures above the critical temperature). Quality lines: the dome grid. Isochores: 301 temperatures. Validity boundary: the closed loop of the Tmin isotherm, the pmin isobar, the Tmax isotherm and the pmax isobar (487 vertices); T20 shows that it is the domain of the click solver. The curves are rebuilt only for the set that changed; isochores only while their layer is on.
Rendering One canvas for the diagram and a separate overlay for the cursor, redrawn with every base redraw. The vertical axis is h in kJ/kg and the horizontal axis s in kJ/(kg·K); the shaded areas are outside the range of the release (below 0.01 °C, above 800 °C, below 1e-4 bar and above 1000 bar), bounded by the validity loop. Every curve is clipped to the plotting window segment by segment before it is drawn (T23), so that a curve whose end points lie far outside the window stays visible where it crosses it. Isoline labels are placed on the visible part of the curve with a white halo. Process paths are drawn after the isolines: one polyline per pair of neighbouring points of the same path in the colour and line style of the path, a direction arrow in the middle of every segment, the markers and the point names in the colour of the path, and a path legend in the lower right corner of the plot when two or more paths are visible or when the diagram is exported. The PNG export renders the same routine at a fixed size with title, legend, configuration state and the time stamp of the file name.
Assumptions and limitations Bisection tolerances are far below the resolution of any plot; the accuracy of the solvers is measured in T9, T10 and T12.
8. Verification and Numerical Accuracy
Scope Verification shows that the equations are solved correctly and that published reference values are reproduced; it is not validation against measurements. The suite runs in the application (footer → Verification) and in Node. A failing test is a finding: diagnose the cause, do not adjust the criterion (the failures that led to A-4 and A-16 were found by T12 and by a sweep of saturation states). The tests T1–T11 concern the property kernel and the solvers, T12–T13 the states and the change of basis, T14–T15 the process semantics and the regression of the Rankine demo, T16–T18 the IC, the CSV and the input validation, T19–T20 the isolines and the validity boundary, T21–T22 the process examples, T23 the clipping of the curves to the plotting window and T24 the independent process paths (workflow, independence of the edit operations, IC and CSV round trips that keep the paths apart, the throttling comparison). No criterion was relaxed to make a test pass without a diagnosis. Changes after a first run: T12 (the entropy tolerance 1e-9 → 1e-8 kJ/(kg·K), after the solver accuracy of about 2e-9 had been measured), T20 (the tolerance test moved to the p_max edge, where the solver clamps the pressure) and T23 (the straight-line criterion 1e-5 of h, after the inconsistency of the release at saturation, T11, had been identified as the cause of 2e-6). T16, T18 and T21 gained cases with v1.1.0 (paths, schema 2, the twelfth example).
Table 8.1 — Release verification suite (24 of 24 passed; generated from an actual run, 1003 ms in Node 22).
| ID | Test | Criterion | Result | Measured |
|---|
| T1 | Region 1 (Table 5 of R7-97): v, h, u, s, c_p at 300 K/3 MPa, 300 K/80 MPa, 500 K/3 MPa | max relative deviation ≤ 1e-8 (tabulated to 9 digits) | PASS | 2.81e-9 (15 values) |
| T2 | Region 2 (Table 15 of R7-97): v, h, u, s, c_p at 300 K/0.0035 MPa, 700 K/0.0035 MPa, 700 K/30 MPa | max relative deviation ≤ 1e-8 | PASS | 2.10e-9 (15 values) |
| T3 | Region 3 (Table 33 of R7-97): p, h, u, s at (650 K, 500 kg/m³), (650 K, 200 kg/m³), (750 K, 500 kg/m³) | max relative deviation ≤ 1e-8 (c_p and w are not provided by the region-3 kernel) | PASS | 2.10e-9 (12 values) |
| T4 | Region 4 and B23 (Tables 35, 36 and the B23 point of R7-97): p_s(300, 500, 600 K), T_s(0.1, 1, 10 MPa), p_B23(623.15 K) | max relative deviation ≤ 1e-8 | PASS | 2.87e-9 (7 values) |
| T5 | Reference constants: critical point (ρ_c, T_c) gives p_c, h_c and s_c of the dome; p_s(T_c) = p_c; T_s(p_c) = T_c; triple point p_s(273.16 K) = 611.657 Pa with s = u = 0 for saturated liquid | relative deviation ≤ 1e-6; |s|, |u|/T_t ≤ 1e-6 kJ/(kg K); h_c, s_c within 1e-8 | PASS | 1.74e-11; 6.16e-8; 2.34e-9 |
| T6 | Region-3 density solver: p(ρ, T) back-substitution on a 41 × 21 grid of (p, T) states above the B23 line | 0 unresolved, 0 inconsistent (relative ≤ 1e-6) | PASS | 861 states: 0 unresolved, 0 inconsistent |
| T7 | Boundary consistency: regions 2/3 along the B23 line and regions 1/3 along the 623.15 K isotherm | Δv ≤ 0.05 %, Δh ≤ 0.2 kJ/kg, Δs ≤ 0.2 J/(kg K) (Prague values) | PASS | 2/3: 1.81e-2 %, 1.34e-1 kJ/kg, 1.75e-1 J/(kg K); 1/3: 3.57e-3 %, 3.06e-2 kJ/kg, 4.22e-2 J/(kg K) |
| T8 | Dome continuity at 623.15 K (change of formulation from regions 1/2 to region 3 with saturated-density correlations) | Δh ≤ 0.2 kJ/kg, Δs ≤ 0.2 J/(kg K), Δv ≤ 0.05 % between 623.15 K and 623.1501 K | PASS | 3.80e-2 kJ/kg, 6.24e-2 J/(kg K), 1.00e-2 % |
| T9 | Inverse solvers (p,h) and (p,s) → T on a single-phase grid across regions 1, 2 and 3 | 0 failures; max |ΔT| ≤ 1e-6 K | PASS | 120 states, 0 failures; 4.13e-9 K, 4.13e-9 K |
| T10 | Inverse solver (h,s) → p, T, x (the click solver of the diagram): 120 single-phase states on the grid of T9 (liquid separately: h and s hardly depend on p there) and 40 two-phase states; (T,s) → p for T ≥ 20 °C (below about 4 °C the state is not unique) | 0 failures; |Δh| ≤ 1e-4 kJ/kg, |Δs| ≤ 1e-8; Δp/p ≤ 1e-6 and |ΔT| ≤ 1e-3 K outside the liquid, ≤ 1e-4 in the liquid; |Δx| ≤ 1e-6; (T,s): |Δs| ≤ 1e-9, Δp/p ≤ 1e-6 | PASS | |Δh| 2.86e-6, |Δs| 4.72e-11; Δp/p 1.81e-8 (liquid 8.40e-6), |ΔT| 2.02e-6 K; |Δx| 1.57e-8; (T,s) 4.03e-13, 6.78e-11 |
| T11 | Two-phase states: lever rule, (T,x) ≡ (p,x), recovery of x from (p,h) and (T,s), straight isobar of slope T_sat in the (s,h) plane; 10 saturation temperatures × 5 qualities | lever rule ≤ 1e-12; (T,x) ≡ (p,x) ≤ 1e-9; recovered x ≤ 1e-9; slope relation ≤ 1e-3 (relative to the enthalpy of vaporisation; measures the Gibbs inconsistency of the release at saturation) | PASS | 50 states; 0, 1.54e-12, 2.01e-12, 1.11e-15; 5.27e-6 |
| T12 | States exactly on the saturation lines x = 0 and x = 1 (12 temperatures) given by (p,h), (p,s) and (h,s) are found (finding A-4) | 0 failures; |Δh| ≤ 1e-6 kJ/kg, |Δs| ≤ 1e-8 kJ/(kg K) | PASS | 72 states, 0 failures |
| T13 | Change of basis (pT, px, ph, ps, Tx, Ts, hs) reproduces the same state (9 states × 7 bases, non-representable conversions excluded) | 0 unresolved; combined relative deviation ≤ 1e-6 | PASS | 47 conversions, 0 unresolved; 3.27e-9 |
| T14 | Process semantics on the Rankine demo (0.05 bar, 70 bar, 500 °C, η_is = 0.88): segment types 1→2 isentropic, 2→3 isobaric, 3→4 polytropic, 4→1′ isobaric + isothermal; a zero-length segment is “no change”; first-law balance q_in − q_out = w_net | types as stated; |q_in − q_out − w_net| ≤ 1e-9 kJ/kg | PASS | isentropic | isobaric | polytropic | isobaric + isothermal (phase change); 2.27e-13 kJ/kg |
| T15 | Default-case regression: Rankine-demo states (T, p, h, s) and cycle totals (q_in, w_net, η_th) against the stored values | combined relative deviation ≤ 1e-9 | PASS | 4.44e-13 |
| T16 | Input Configuration (schema 2): exact round trip incl. two paths (names, colours, line styles, visibility, order), state points (basis h,s), inactive settings, isotherm list, selected path and drawing state; 21 malformed files are rejected without a result; the migration of schema 1 (one list of points → “Path 1”) and the defaults of missing optional fields are verified | round trip exact; all 21 malformed variants rejected | PASS | round trip exact; 21 / 21 rejected; 1 migration(s) |
| T17 | State-point CSV: exact round trip, comma/semicolon delimiter, decimal comma, exponent notation, Unicode minus, header and # lines, files of v1.0.0, fallback to the h and s columns; 7 malformed files are rejected as a whole | round trip exact; all 7 malformed variants rejected | PASS | round trip exact; 7 / 7 rejected |
| T18 | Configuration validation: reference case valid; inverted or too narrow axes, out-of-range isobars, isotherms, isochores, x, p (incl. p > 1000 bar in (p,h), finding A-8), an unresolvable (h,s) input, empty and over-long names, non-boolean layers, points without a path, more than 12 paths, malformed path colours, a missing selected path and points not grouped by path are rejected; list parser | reference valid; 21 invalid variants rejected; list parser strict | PASS | 21 / 21 rejected |
| T19 | Isoline construction: 45 curves (default isobars, isotherms, quality lines, three isochores) finite with ≥ 5 points (a NaN separates the two branches of an isotherm); dome ordered with s_f ≤ s_g; quality lines inside the dome; isobar slope (∂h/∂s)_p = T; isobar below the triple-point pressure without liquid part | 0 short or non-finite curves; 0 ordering violations; slope relation ≤ 1e-6; jump of the saturated liquid at T_c − 1 K (known, finding A-17): Δs_f ≤ 10 J/(kg K), Δv_f ≤ 1.5 % | PASS | 0 short, 0 non-finite, 0 dome and 0 quality violations; slope 1.87e-9; jump of the saturated liquid at T_c − 1 K: Δs_f = 7.01 J/(kg K), Δh_f = 4.51 kJ/kg, Δv_f = 0.87 % |
| T20 | Validity boundary of the (s,h) plane (loop of the T_min isotherm, p_min isobar, T_max isotherm and p_max isobar): simple closed loop of 487 vertices; on 96 lines s = const the loop brackets exactly the states that the click solver (h,s) resolves (1 kJ/kg inside, 3 kJ/kg outside); acceptance tolerance of the solver at the p_max edge 1e-4 relative + 1e-3 kJ/kg (states within it are accepted, 4 times it are refused) | 0 crossings; 2 crossings on every line; 0 mismatches; tolerance as stated | PASS | 0 crossings; 0 lines without 2 crossings; 0 / 480 mismatches; tolerance as stated |
| T21 | Process examples (12): every point resolves, each case is a valid configuration and has the documented segment types; closed-loop first law (Rankine, pump, reheat); q = ∫T ds along the boiler isobar; η_is as ratio of vertical distances; h constant in all throttling steps; lever-rule fractions (calorimeter, flash, blowdown) and the straight line f–2–g of the flash; x = 0 at the onset of flashing; reheat gives a drier exhaust than direct expansion; reheat factor above 1; actual exhaust of the wet-steam expansion drier than the isentropic one; pseudo-critical maximum, no boiling line at 250 bar and a boiling line at 150 bar | 0 unresolved, 0 deviations; invariants ≤ 1e-9 (q = ∫T ds ≤ 1e-4 relative); all inequalities hold | PASS | 53 / 53 points, 0 type and 0 configuration deviations; 1.87e-11; ∫T ds 6.44e-7; RF = 1.0378, η_o = 0.8822 |
| T22 | Example regression: key results of the 12 examples (Δh_s and Δh of the turbine, η_th, w_net, exhaust quality, reheat factor, T_pc, T after throttling, Δs of the bypass valve, flash fraction, onset pressure) against stored values (4–6 significant digits) | max relative deviation ≤ 1e-3 (stored to 4–6 digits; a change of the kernel would move them by far more) | PASS | 3.79e-7 |
| T23 | Clipping of the curves to the plotting window: no curve that crosses the window is dropped (0.05 bar isobar in the wet-steam window) | 0 dropped curves, 0 points outside the window; the 0.05 bar isobar in the window 5.5 … 9 × 1800 … 3000 is present and straight with slope T_sat to 1e-5 of h (the release is consistent at saturation only to about 1e-6 of h, T11) | PASS | 520 curve × window combinations: 0 dropped, 0 outside; 0.05 bar isobar: 1 part, deviation from the line 2.36e-6 |
| T24 | Independent process paths: start / finish / new path without a connecting segment, insertion into the selected path, independent deletion of a point, a path and all paths (the settings stay), rename, hide, colour and line style, the limit of 12 paths, IC and CSV round trips that keep the paths apart, and the throttling comparison 155 bar and 35 bar to 1 bar | 0 deviations in 12 checks | PASS | 12 checks: 0 deviations; outlet at 1 bar: x = 0.9651 at 99.61 °C (from 155 bar), 163.19 °C superheated (from 35 bar) |
Table 8.2 — Default-case regression values (Rankine demo), stored in the suite and printed from the same run (T15).
| Point | T [°C] | p [bar] | h [kJ/kg] | s [kJ/(kg·K)] |
|---|
| 1 | 32.8754895238 | 0.05 | 137.765118989 | 0.4762537895051 |
| 2 | 33.0459004408 | 70 | 144.786677439 | 0.4762537895613 |
| 3 | 500 | 70 | 3411.25026382 | 6.799715110694 |
| 4 | 32.8754895238 | 0.05 | 2233.50260267 | 7.324515687831 |
| 1′ | 32.8754895238 | 0.05 | 137.765118989 | 0.4762537895051 |
| Cycle totals | stored value |
|---|
| qin [kJ/kg] | 3266.46358638 |
| wnet [kJ/kg] | 1170.7261027 |
| ηth [–] | 0.3584078229386 |
Table 8.3 — Example regression values (T22): key results of the process examples, stored to 7 significant digits.
| Example | Stored key results |
|---|
| Turbine (6.1) | Δhs [kJ/kg] = 531.559; Δh [kJ/kg] = 467.772; Δs [kJ/(kg·K)] = 0.138167 |
| Rankine (6.2) | ηth [–] = 0.368683; wnet [kJ/kg] = 1189.84; x4 [–] = 0.84087 |
| Pump (6.3) | wp [kJ/kg] = 1.98116; wc [kJ/kg] = 736.381; ηth [–] = 0.245462 |
| Reheat (6.4) | ηth [–] = 0.405637; wnet [kJ/kg] = 1515.52; x6 [–] = 0.916479 |
| Reheat factor (6.5) | RF [–] = 1.03784; ηo [–] = 0.882164; x5 [–] = 0.85891 |
| Wet steam (6.6) | x2 [–] = 0.723818; h2 [kJ/kg] = 1891.58 |
| Supercritical (6.7) | Tpc [°C] = 384.87; h2 [kJ/kg] = 2151.2 |
| Calorimeter (6.8) | T2 [°C] = 120.039; h1 [kJ/kg] = 2716.69 |
| Bypass (6.9) | T2 [°C] = 462.954; Δs [kJ/(kg·K)] = 3.31593 |
| Flash (6.10) | x2 [–] = 0.211346; h1 [kJ/kg] = 1085.69 |
| Blowdown (6.11) | ponset [bar] = 118.257; x3 [–] = 0.472562 |
| Throttling comparison (6.12) | x2 (from 155 bar) [–] = 0.965124; T2b (from 35 bar) [°C] = 163.194 |
Table 8.4 — Independent cross-check against the open-source Python package iapws 1.5.5 (a separate implementation of IAPWS-IF97), performed at build time and not part of the in-app suite. The grid has 48 temperatures (274 … 1072 K) × 28 pressures (1e-3 … 1000 bar, logarithmic); 192 single-phase states with a pressure below 611 Pa lie outside the range of the package and were not compared.
| Domain | States | max |Δv/v| | max |Δh| [kJ/kg] | max |Δs| [kJ/(kg·K)] |
|---|
| Region 1 (liquid) | 240 | 2.44e−15 | 1.25e−12 | 4.94e−15 |
| Region 2 (vapour) | 880 | 6.66e−16 | 2.73e−12 | 3.55e−15 |
| Region 3 (near-critical) | 32 | 4.43e−13 | 2.53e−10 | 4.05e−13 |
| Saturation line, T ≤ 623.15 K (f and g) | 9 | 1.22e−14 | 4.55e−12 | 7.11e−15 |
| Saturation line, T > 623.15 K (f and g) | 6 | 3.86e−2 | 2.11e1 | 3.26e−2 |
Interpretation The agreement in the single-phase regions is at round-off level because both implementations evaluate the same basic equations; it confirms the coefficient tables and the region logic over the whole plotted domain. It does not validate the model of water. The near-critical saturation differences are explained in A-5 and A-17. The reference values of T1–T5 were taken over from the verification suite of the T–s Diagram Simulator v1.0.2; they were not compared again with the text of the release in this delivery (§11).
9. Model Parameters and Constants
Evidence classes: externally sourced derived assumption not verified.
| Parameter | Value | Unit | Class | Basis | Editable |
|---|
| R | 0.461526 | kJ/(kg·K) | externally sourced | Release §3, Eq. (1). | no |
| Tc, pc, ρc | 647.096; 22.064; 322 | K; MPa; kg/m³ | externally sourced | Release §3, Eqs. (2)–(4). | no |
| hc, sc | 2087.54685; 4.412021 | kJ/kg; kJ/(kg·K) | derived | Region-3 equation at (ρc, Tc); used for the critical point of the dome. | no |
| Coefficients of regions 1–4, B23 | tables of the release | – | externally sourced | Transcribed in v1.0.0; verified indirectly by T1–T8 and Table 8.4 (§11). | no |
| Saturated-density correlations | 6 + 6 coefficients | – | not verified | Supplementary release on saturation properties; the coefficients were not re-checked against the primary document (§11). Used only near the critical point and as start values. | no |
| Validity limits | 273.16 K − 0.5 K … 1073.15 K; 1e-5 … 100 MPa | K; MPa | derived | Range of the release (regions 1–4); 0.5 K tolerance below the lower limit (A-13). | no |
| Classification tolerances | 5e-3; 3e-3; 0.15; 0.5 | kJ/(kg·K); –; K; kJ/kg | assumption | Chosen in v1.0.0 so that hand-placed points on a line count as on that line; not sourced. | no |
| Rankine demo | 0.05; 70; 500; 0.88 | bar; bar; °C; – | assumption | Illustrative reference case, see the reasonableness check below. | no (points editable) |
| Process examples (§6) | pressures, temperatures, qualities and efficiencies stated in each note | bar; °C; –; – | assumption | Specifications of the illustrations; every physical result is computed. Ambient temperature for exergy 298.15 K; efficiencies 0.88 (0.85 per stage in 6.5). | points editable |
| Axis, isoline and preset defaults | see §4; isobars 0.05 … 1000 bar incl. 0.2 and 2 bar | – | assumption | Display defaults inherited from v1.0.0; 0.2 bar and 2 bar added in v1.1.0 for an even spacing of the isobars. | yes |
| Limits of the workspace | 12 paths; 200 state points; names 16 / 48 characters | – | assumption | Chosen so that the diagram and the table stay readable; not sourced. | no |
Reasonableness check of the Rankine demo (stated reference case: subcritical steam cycle without reheat or regeneration).
| Constant | Default | Reasoning | Assessment |
|---|
| Condenser pressure | 0.05 bar | Saturation temperature 32.9 °C, a typical water-cooled condenser. | plausible, unchanged |
| Boiler outlet | 70 bar, 500 °C | Typical of medium-pressure steam turbines; superheat of 214.2 K. | plausible, unchanged |
| Turbine ηis | 0.88 | Typical for a multistage condensing turbine; exhaust quality 0.865 is above the 0.85 that is often quoted as a moisture limit (rule of thumb, not modelled). | plausible, unchanged |
| Pump | isentropic | The pump work is 7.02 kJ/kg, about 0.6 % of the turbine work; the simplification is immaterial for the cycle picture. | simplification, stated |
| ηth | — | 35.84 %: consistent with a Rankine cycle of this pressure level without reheat or feed heating. | plausible |
10. Model Scope and Limitations
Represented Water and steam in equilibrium states over regions 1–4 of the release (0 °C to 800 °C, up to 100 MPa); seven state bases; isobars, isotherms, quality lines and isochores; steady-flow first-law interpretation of straight and reconstructed process segments; entropy generation of adiabatic segments; cycle totals for isobaric heat and work segments; twelve single-stream process examples.
Not represented Region 5 (above 800 °C) and the metastable-vapour equation; metastable liquid beyond the extrapolation of regions 1 and 3; other fluids, heavy water, mixtures, humid air; kinetic and potential energy; non-adiabatic machines with heat loss; real machine characteristics; uncertainty estimates of the release (tolerance regions of its Figs. 3–6 are not evaluated); branched process flows (bleed steam, feedwater preheaters, moisture separators with a separate drain, two-stream heat exchangers); regenerative cycle logic (the segment rules assume that isobaric segments are the only heat exchangers). The state (T, s) is not unique below about 4 °C (A-6); the pressure of a compressed-liquid state given by (h, s) is only weakly determined (A-14); cp is not provided in region 3 and in the two-phase region. Do not hide the limitations: results of safety, regulatory or contractual significance shall be checked against an independent property source.
11. Data Provenance and Open Points
What was found The property kernel and all coefficient tables come from v1.0.0 (Antranova, 2026-09-17) and are identical to those of the T–s Diagram Simulator v1.0.2 apart from A-4 and A-16. The Python package iapws 1.5.5 served as an independent implementation (Table 8.4). The reference values of T1–T5 (Tables 5, 15, 33, 35 and 36 and the B23 check point of the release R7-97(2012)) and the boundary-consistency values of T7 are those of the verification suite of the T–s Diagram Simulator v1.0.2, in which, according to its documentation, they were compared with the text of the release.
What was not found The release itself was not consulted again in this delivery: the reference values were carried over, not re-read. The supplementary release on saturation properties (cited as [12] in the release) was not obtained; the coefficients of the saturated-density correlations could therefore not be checked against it. The coefficient tables of the release were compared with the code only through reference values, boundary consistency and the cross-check, not digit by digit.
Unverified items (1) The six + six coefficients of the saturated-density correlations (effect confined to T > 623.15 K; A-5 and A-17 quantify the consequence). (2) The digit-by-digit transcription of the basic-equation coefficients — indirectly verified: a wrong digit would show in T1–T8 and Table 8.4 unless it changed the property by less than the round-off level. (3) The classification tolerances of §5. (4) The 0.5 K temperature tolerance (A-13). (5) The Rankine demo values and the specifications of the process examples are assumptions. (6) The reference values of T1–T5 and T7 were not compared with the release again in this delivery. (7) The rule-of-thumb moisture limit quoted in §6.6 and §9 is not sourced.
12. References
External standards and reports
- [1] IAPWS, Revised Release on the IAPWS Industrial Formulation 1997 for the Thermodynamic Properties of Water and Steam, IAPWS R7-97(2012), Lucerne, Switzerland, August 2007 (revision of region 5). Source of the reference values (carried over from the T–s Diagram Simulator v1.0.2); not re-read in this delivery.
- [2] Wagner, W., Cooper, J. R., Dittmann, A., Kijima, J., Kretzschmar, H.-J., Kruse, A., Mareš, R., Oguchi, K., Sato, H., Stöcker, I., Šifner, O., Takaishi, Y., Tanishita, I., Trübenbach, J., Willkommen, Th., The IAPWS Industrial Formulation 1997 for the Thermodynamic Properties of Water and Steam, J. Eng. Gas Turbines & Power 122, 150–182 (2000). Further reading — not consulted (cited in [1]).
- [3] IAPWS, Revised Supplementary Release on Saturation Properties of Ordinary Water Substance (1992). Further reading — not consulted (cited as [12] in [1]; source of the saturated-density correlations used near the critical point, attribution taken from the v1.0.0 documentation).
- [4] Python package
iapws 1.5.5 (implementation of IAPWS-IF97), used only as an independent implementation at build time. Used as a program; source not audited.
Antranova model basis
- [A1] Antranova Engineering AB, h–s (Mollier) Diagram Simulator, version 1.0.0, released 2026-09-17 (source of the property kernel, the isoline construction and the interface behaviour).
- [A2] Antranova Engineering AB, T–s Diagram Simulator (AntraSIM-0060), version 1.0.2, released 2026-09-20 (source of the corrected kernel, the family layout and the pattern of the process examples).