See the deviation, not just the claim
Every row here is regressed live against a named, cited dataset with a stated acceptance tolerance. Expand any row for the parity plot, or run the exact case yourself.
| Binary pair | Package | Bubble-T AAD | Vapor-y AAD | Points | Status | |
|---|---|---|---|---|---|---|
Ethanol-Water (NRTL) Gmehling & Onken, DECHEMA Vol. I; Carey & Lewis (1932). 101.3 kPa. | nrtl | 0.18 K/ ≤ 1 K | 0.0043/ ≤ 0.02 | 9 | Pass | |
Ethanol-Water (UNIQUAC) Gmehling & Onken, DECHEMA Vol. I; Carey & Lewis (1932). 101.3 kPa. | uniquac | 0.10 K/ ≤ 1.2 K | 0.0029/ ≤ 0.025 | 9 | Pass | |
Methanol-Water (NRTL) Dunlop (1948) smoothed data via Perry's Chemical Engineers' Handbook. 101.3 kPa. | nrtl | 0.06 K/ ≤ 1 K | 0.0063/ ≤ 0.02 | 9 | Pass | |
Benzene-Toluene (Peng-Robinson) Perry's Chemical Engineers' Handbook; near-ideal benzene-toluene at 101.3 kPa. | peng-robinson | 0.13 K/ ≤ 2 K | 0.0035/ ≤ 0.03 | 9 | Pass | |
Benzene-Toluene (Soave-RK) Perry's Chemical Engineers' Handbook; near-ideal benzene-toluene at 101.3 kPa. | srk | 0.24 K/ ≤ 2 K | 0.0026/ ≤ 0.03 | 9 | Pass |
AAD = average absolute deviation vs. cited experimental data. Generated 9/7/2026, 9:01:03 PM.
Measured VLE at corpus scale — NIST TRC ThermoML Archive
378 binary pairs / 13,823 measured tie-lines, vendored in this repository. For every measured (T, x) the model is asked what vapour is in equilibrium with that liquid; the number is the average absolute deviation in vapour mole fraction.
| Package | Coverage | Median AAD (y) / tol | Mean AAD (y) | Worst pairs | Status |
|---|---|---|---|---|---|
| nrtl | 17%(10/60) | 0.0309/ 0.08 | 0.0376 | isobutanol–n_hexane 0.078 n_hexane–sec_butanol 0.069 n_butane–propane 0.048 | Pass |
| peng-robinson | 97%(58/60) | 0.0627/ 0.08 | 0.1001 | 3_methylamino_propylamine–water 1.880 gamma_valerolactone–water 0.245 carbon_dioxide–perfluoro_n_hexane 0.167 | Pass |
| srk | 98%(59/60) | 0.0614/ 0.08 | 1.2035 | 3_methylamino_propylamine–water 67.016 ammonia–ethanol 0.250 gamma_valerolactone–water 0.208 | Pass |
Coverage qualifies the deviation and is reported next to it deliberately. NRTL is the most accurate here but only reaches the binaries it has fitted interaction parameters for; the cubics reach nearly every pair in the corpus at roughly twice the deviation. That trade is the result, not a footnote. The gate is on the median rather than per pair — a sweep of arbitrary binaries legitimately contains systems no general-purpose package fits.
Component attribution in the source archive is inferred, not read: the rendering mislabels which component a composition belongs to, so labels are resolved by a pure-component saturation-pressure tie-break that corrected 23% of datasets. The tie-break uses only pure-component data, independent of the mixture models scored here — but it is an inference, and it travels with these numbers.
Pure-component property path — measured against NIST ThermoML
1,038 components, 62,715 measured points. Scores the component databank's own liquid-property path: only 431 of 6,745 components carry a regressed DIPPR block, so for the rest every property is a corresponding-states estimate.
| Property | Method | Components / points | Median error | p90 |
|---|---|---|---|---|
| liquid viscosity | DIPPR (regressed)control | 137 / 2,841 | 1.9% | 9% |
| liquid viscosity | Letsou-Stielestimate | 265 / 3,722 | 68.8% | 94% |
| liquid thermal conductivity | DIPPR (regressed)control | 61 / 789 | 2.6% | 7% |
| liquid thermal conductivity | Sato-Riedelestimate | 67 / 843 | 11.0% | 47% |
| surface tension | DIPPR (regressed)control | 89 / 1,406 | 1.0% | 4% |
| surface tension | Brock-Birdestimate | 156 / 1,614 | 7.1% | 50% |
| vapor pressure | DIPPR (regressed)control | 184 / 5,796 | 1.3% | 16% |
| vapor pressure | Lee-Keslerestimate | 519 / 11,879 | 10.6% | 86% |
| liquid density | DIPPR (regressed)control | 174 / 3,633 | 0.1% | 1% |
The DIPPR rows are a control, not a result: a regressed correlation scored against the data it was regressed from must come out tight, and that is what makes the estimated rows interpretable rather than merely asserted. Letsou-Stiel viscosity measures at roughly twice its own published error.
Still open: liquid density has no corresponding-states fallback, so 6,286 components carry criticals but cannot produce one. Vapour pressure had the same hole until Lee-Kesler was measured on this corpus and wired in.
MESH solver vs. the exact analytical solution
The production distillation solver run on a synthetic constant-α, constant-molal-overflow binary — the one case where McCabe-Thiele and Fenske are exact. The reference is a different algorithm (sequential stage march with shooting), so agreement tests the solver rather than restating it.
x_D 0.888624 vs 0.888625 · x_B 0.111374 vs 0.111375 · α 2, N 12, R 2
McCabe & Thiele, Ind. Eng. Chem. 17, 605 (1925) / Lewis (1922) operating-line staircase; Fenske, Ind. Eng. Chem. 24, 482 (1932) total-reflux limit — both exact for a constant-relative-volatility, constant-molal-overflow binary.
Rigorous column — measured solve time and residual
Real wall-clock timing of the Boston-Sullivan inside-out MESH solver at increasing stage counts, measured on this run.
| Case | Stages | Solve time | Residual | Status |
|---|---|---|---|---|
| 5 stages Small stripper / rough-cut column | 5 | 0.97 s | 8.2e-7 | converged |
| 8 stages Standard binary distillation | 8 | 12.31 s | 7.1e-4 | converged |
| 12 stages High-purity binary split | 12 | 16.93 s | 6.6e-4 | converged |
Timed on the server that generated this report, so absolute times reflect its hardware and current load — the point is the trend with stage count and that every case converges, not the seconds.
Ideal-gas heat capacity vs. independent compilations (TRC, Poling)
| Population | Coverage | Median |dev| | p90 |dev| | Status |
|---|---|---|---|---|
| Correlations the solver uses254/382 | 66% | 0.27% | 1.52% | validation.table.pass |
| CoolProp-shadowed (never evaluated)42/48 | 88% | 0.21% | 0.97% | validation.table.pass |
5 correlation(s) found wrong beyond the threshold are superseded at runtime by the TRC coefficients and are therefore listed here rather than scored: ethyl_chloride, ethylene_carbonate, ethylene_glycol, nitrogen_trioxide, acrylic_acid.
Matched by CAS against the TRC gas tables and Poling, Prausnitz & O'Connell 5th ed. Appendix A, each evaluated only inside its own stated temperature range. Both populations are shown because a CoolProp cross-check can only see the shadowed ones — which are exactly the correlations the solver never evaluates. This tests transcription, units and equation dispatch against independent compilations of overlapping experimental literature; it is not an independent measurement.
Electrolyte activity coefficients (B-dot vs. Pitzer)
| Model | Ionic strength | Model γ | Literature γ | Source | Status |
|---|---|---|---|---|---|
| NaCl mean activity coefficient (B-dot) | 1 mol/kg | 0.6620 | 0.6570 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
| NaCl mean activity coefficient (B-dot) | 2 mol/kg | 0.6760 | 0.6680 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
| NaCl mean activity coefficient (B-dot) | 3 mol/kg | 0.7139 | 0.7140 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
| NaCl mean activity coefficient (B-dot) | 4 mol/kg | 0.7641 | 0.7830 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
| NaCl mean activity coefficient (Pitzer) | 1 mol/kg | 0.6549 | 0.6570 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
| NaCl mean activity coefficient (Pitzer) | 2 mol/kg | 0.6666 | 0.6680 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
| NaCl mean activity coefficient (Pitzer) | 3 mol/kg | 0.7122 | 0.7140 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
| NaCl mean activity coefficient (Pitzer) | 4 mol/kg | 0.7810 | 0.7830 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
| NaCl mean activity coefficient (Pitzer) | 6 mol/kg | 0.9865 | 0.9860 | Hamer & Wu, J. Phys. Chem. Ref. Data 1, 1047 (1972); NaCl, 25 degC. | Pass |
Saturation pressure (Antoine / EoS)
| T (K) | Model Psat | Reference Psat | Deviation | Source | Status |
|---|---|---|---|---|---|
| 373.15 | 101.42 kPa | 101.42 kPa | 0.002% | Cengel & Boles, "Thermodynamics: An Engineering Approach", Table A-4 (IAPWS-IF97). | Pass |
| 393.15 | 198.67 kPa | 198.67 kPa | 0.002% | Cengel & Boles, "Thermodynamics: An Engineering Approach", Table A-4 (IAPWS-IF97). | Pass |
| 423.15 | 476.18 kPa | 476.16 kPa | 0.003% | Cengel & Boles, "Thermodynamics: An Engineering Approach", Table A-4 (IAPWS-IF97). | Pass |
| 443.15 | 792.19 kPa | 792.19 kPa | 0.000% | Cengel & Boles, "Thermodynamics: An Engineering Approach", Table A-4 (IAPWS-IF97). | Pass |
PC-SAFT — pure-component saturation & liquid density
| Component | Condition | Model value | Reference value | Deviation | Source | Status |
|---|---|---|---|---|---|---|
| propane | P=9.97e+05 Pa | 299.93 K | 300.00 K | 0.02% | NIST WebBook saturation data; Gross & Sadowski (2001) Table 1 parameters. | Pass |
| n_pentane | P=1.01e+05 Pa | 309.20 K | 309.20 K | 0.00% | NIST WebBook saturation data; Gross & Sadowski (2001) Table 1 parameters. | Pass |
| n_hexane | P=1.01e+05 Pa | 341.95 K | 341.90 K | 0.01% | NIST WebBook saturation data; Gross & Sadowski (2001) Table 1 parameters. | Pass |
| n_octane | P=1.01e+05 Pa | 398.98 K | 398.80 K | 0.05% | NIST WebBook saturation data; Gross & Sadowski (2001) Table 1 parameters. | Pass |
| benzene | P=1.01e+05 Pa | 353.50 K | 353.20 K | 0.09% | NIST WebBook saturation data; Gross & Sadowski (2001) Table 1 parameters. | Pass |
| ethane | P=2.66e+06 Pa | 277.68 K | 280.00 K | 0.83% | NIST WebBook saturation data; Gross & Sadowski (2001) Table 1 parameters. | Pass |
| co2 | P=1e+06 Pa | 231.53 K | 233.00 K | 0.63% | NIST WebBook saturation data; Gross & Sadowski (2001) Table 1 parameters. | Pass |
| co2 | T=240.0 K, P=1.28e+06 Pa | 1064.33 kg/m^3 | 1088.00 kg/m^3 | 2.18% | NIST WebBook liquid density; Gross & Sadowski (2001) Table 1 parameters. | Pass |
| n_heptane | T=298.1 K, P=1e+05 Pa | 672.49 kg/m^3 | 679.50 kg/m^3 | 1.03% | NIST WebBook liquid density; Gross & Sadowski (2001) Table 1 parameters. | Pass |
Distillation column — stage count vs. Fenske minimum
Actual converged stages compared against the Fenske minimum-reflux stage count for the same separation; ratio must fall in the expected design range.
| Feed / package | Actual stages | Fenske minimum | Ratio | Source | Status |
|---|---|---|---|---|---|
ethanol-water nrtl | 8 | 8.23 | 0.97×/ [0.9–2.5] | Fenske, Ind. Eng. Chem. 24, 482 (1932) — closed-form total-reflux min-stage equation. | Pass |
Azeotrope location
Predicted azeotrope composition and temperature compared against the cited experimental azeotrope for each system.
| Binary pair | Package | Composition (predicted / experimental) | Temperature (predicted / experimental) | Source | Status | |
|---|---|---|---|---|---|---|
ethanol-water azeotrope | nrtl | 89.07% / 89.40%Δ 0.33 / ≤ 2% | 351.40 / 351.30 KΔ 0.10 / ≤ 1 K | Gmehling & Onken, DECHEMA Vol. I; ethanol-water azeotrope 89.4 mol%, 78.15 degC, 1atm. | Pass |
Liquid-liquid equilibrium (LLE)
Checks whether the thermo package predicts the same two-phase liquid split the cited data shows, and how much of each component crosses into the other phase.
| System | T (K) | Two phases? | Minor-component carryover | Source | Status |
|---|---|---|---|---|---|
water/n_hexane miscibility gap | 298.15 | Yes | n_hexane in water: 0.009% / ≤ 0.50% water in n_hexane: 0.076% / ≤ 1.00% | Sorensen & Arlt, DECHEMA LLE Data Collection; water/n-hexane near-immiscibility, 25 C. | Pass |
Thermodynamic consistency (Gibbs-Duhem)
The Herington area-test D and J values for each VLE dataset; |D − J| within 10 flags the underlying data (not the model) as thermodynamically consistent.
| Binary pair | D | J | |D − J| / ≤ 10 | Source | Status |
|---|---|---|---|---|---|
Ethanol-Water (NRTL) | 11.0 | 7.4 | 3.6 | Gmehling & Onken, DECHEMA Vol. I; Carey & Lewis (1932). 101.3 kPa. | Consistent |
Ethanol-Water (UNIQUAC) | 11.0 | 7.4 | 3.6 | Gmehling & Onken, DECHEMA Vol. I; Carey & Lewis (1932). 101.3 kPa. | Consistent |
Methanol-Water (NRTL) | 22.1 | 9.6 | 12.5 | Dunlop (1948) smoothed data via Perry's Chemical Engineers' Handbook. 101.3 kPa. | marginal |
Benzene-Toluene (Peng-Robinson) | 45.1 | 10.1 | — | Perry's Chemical Engineers' Handbook; near-ideal benzene-toluene at 101.3 kPa. | Near-ideal |
Benzene-Toluene (Soave-RK) | 45.1 | 10.1 | — | Perry's Chemical Engineers' Handbook; near-ideal benzene-toluene at 101.3 kPa. | Near-ideal |
APC controller solve-time scaling
Timed benchmark of the real MIMO DMC quadratic-program solver,flowsim.apc.mimo_dmc.dmc_move, at increasing controller sizes — measured, not projected.
| Controller size | P / M horizon | Decision vars | Solve time | Optimality residual | Target application | Status |
|---|---|---|---|---|---|---|
| 2 × 4 (unit scale) | 20 / 5 | 10 | 0.04 ms/ ≤ 1000 ms | 4.6e-16 | Local flow loops | Pass |
| 5 × 10 (process loop) | 20 / 5 | 25 | 0.04 ms/ ≤ 1000 ms | 4.2e-16 | Standard unit ops | Pass |
| 10 × 20 (unit wide) | 30 / 10 | 100 | 0.41 ms/ ≤ 1000 ms | 8.2e-16 | Crude tower section | Pass |
| 20 × 40 (area wide) | 30 / 10 | 200 | 11.09 ms/ ≤ 1000 ms | 1.8e-15 | Fractionation area | Pass |
| 50 × 100 (plant wide) | 30 / 10 | 500 | 59.19 ms/ ≤ 1000 ms | 1.9e-15 | Plant-wide refinery network | Pass |
Protocol: Each row solves the QP end-to-end on this box and reports wall-clock time against the scan-budget ceiling for that controller class.
Optimality residual is the KKT stationarity norm ‖∇L‖∞ at the solver's terminal iterate — near zero confirms the QP actually converged, not just that it stopped.
RTO cycle-solve scaling
Timed benchmark of the real plant-wide multistart Ipopt NLP,flowsim.solver.rto.run_rto_schedule, at increasing multistart-restart counts — measured, not projected.
| Multistart restarts | Solve time | Objective ($/cycle) | Engine | Status |
|---|---|---|---|---|
| 1 multistart | 18.2 ms/ ≤ 1000 ms | $250.00 | Plant-wide NLP (CasADi/Ipopt, multistart) | Pass |
| 4 multistarts | 60.9 ms/ ≤ 1000 ms | $250.00 | Plant-wide NLP (CasADi/Ipopt, multistart) | Pass |
| 8 multistarts | 69.6 ms/ ≤ 1000 ms | $250.00 | Plant-wide NLP (CasADi/Ipopt, multistart) | Pass |
| 16 multistarts | 108.4 ms/ ≤ 1000 ms | $250.00 | Plant-wide NLP (CasADi/Ipopt, multistart) | Pass |
Per-model acceptance cases
Beyond the binary-VLE sweeps above, each of these binds one model to one published dataset, one acceptance metric and one tolerance — the electrolyte, equation-of-state and solubility models a VLE parity plot can't score. 8 of 8 pass. Recomputed live from the shipped code.
| Model / property | Reference dataset | N | Metric | Tolerance | Verdict |
|---|---|---|---|---|---|
| eNRTL CO₂-MEA VLEp_CO₂ vs. loading [Pa] | Jou, Otto & Mather (1995), Can. J. Chem. Eng. 73, 140 — 30 wt% MEA, 313.15 K | 4 | 0.289log10 AAD | 0.450 | pass |
| NRTL ethanol-water VLEbubble temperature [K] | Gmehling & Onken, DECHEMA VLE Data Coll. Vol. I (Carey & Lewis 1932), 101.3 kPa | 9 | 0.178AAD | 1.00 | pass |
| NRTL ethanol-water VLEvapor ethanol fraction [mol frac] | Gmehling & Onken, DECHEMA VLE Data Coll. Vol. I (Carey & Lewis 1932), 101.3 kPa | 9 | 0.00435AAD | 0.0200 | pass |
| Pitzer NaCl activitymean ionic activity coeff. γ± [dimensionless] | Hamer & Wu (1972), J. Phys. Chem. Ref. Data 1, 1047 — NaCl(aq), 298.15 K | 5 | 0.00216rel. AAD | 0.0100 | pass |
| SAFT-VR Mie methane densitysaturated-liquid density [kg/m³] | Lafitte et al. (2013), J. Chem. Phys. 139, 154504 — methane, NIST sat. liquid | 5 | 0.00734rel. AAD | 0.0100 | pass |
| CPA water saturationsaturation temperature vs. pressure [K] | NIST/IAPWS-IF97 steam tables — water saturation line, 10-500 kPa | 5 | 0.234AAD | 0.500 | pass |
| Peng-Robinson speed of soundspeed of sound [m/s] | NIST reference acoustic data — CH₄ ~450, N₂ ~353, CO₂ ~270 m/s at 300 K, 1 bar | 3 | 0.00124rel. AAD | 0.0100 | pass |
| Scale-mineral solubility (Ksp)mineral solubility in pure water [mol/L] | Blount (1977) barite 1.04e-5; CRC fluorite ~2.05e-4 / gypsum ~1.53e-2 mol/L | 3 | 0.0366rel. AAD | 0.0600 | pass |
Numerical-robustness leaderboard
The cases that break solvers — near-critical flashes, spurious-root bubble points, phase boundaries, azeotrope pinches, tight recycles, singular Jacobians — run live through the real engine, each with its measured outcome. Every number is recomputed on load, not stored.
An isenthalpic flash of a mixed refrigerant into the cryogenic cold end; a naive subcooled bracket floors at ~180 K and returns the wrong temperature.
Measured: recovered 169.6 K, vapour fraction 0.465 — in the cold end below 180 K
C3MR liquefaction cold end (110-230 K); subcooled / JT physics (Peng-Robinson).
A wide relative-volatility spread makes the incipient-phase iteration prone to collapsing onto the heaviest pure component's saturation temperature (a spurious root).
Measured: bubble point 222.7 K (pure ethane 220.4 K, pure n-pentane 365.9 K); K-value spread 2.0e+02
92% ethane / propane / butane / pentane at 5 bar; true bubble point sits just above pure ethane's 220.4 K, not near pure n-pentane's 365.9 K.
At the phase boundary the Rachford-Rice root sits exactly at 0 or 1; a naive Newton or unclamped bracket walks outside the physical [0,1] window and diverges.
Measured: psi(all-liquid)=0.00e+00 (=>0), psi(all-vapour)=1.000000 (=>1)
Analytic edges: every K<1 => psi=0; every K>1 => psi=1.
The relative volatility crosses 1 at the azeotrope; a model that misplaces it makes every distillation result past the pinch wrong even when the AAD looks fine.
Measured: located x=0.891 vs 0.894 (dev 0.003), T=351.40 vs 351.30 K (dev 0.10 K)
Gmehling & Onken, DECHEMA Vol. I; ethanol-water azeotrope 89.4 mol%, 78.15 degC, 1atm.
A tight (~5:1) material recycle: the tear fixed point converges slowly and can oscillate; sequential-modular needs many accelerated passes to close the loop.
Measured: converged in 78 recycle passes, tear residual 9.01e-07
high-recycle-ammonia-eo; sequential-modular closes the tear via Wegstein acceleration (the equation-oriented mode closes all stream unknowns in one solve).
An under/over-determined flowsheet has a singular Jacobian; legacy simulators report a cryptic 'Singular Jacobian' code with no location or cause.
Measured: DoF +2, 0 floating variable(s); explained: 2 degree(s) of freedom — system is under-determined
Structural degrees-of-freedom / floating-variable analysis (eo_diagnostics) — the same view surfaced in the in-app Solver Diagnostics panel.
Hand-picked hard cases can only cover what someone thought to try; a seeded sweep of thousands of random (T,P,composition) states hammers the flash across the whole phase envelope — subcooled, two-phase and superheated — and asserts the invariants every flash must satisfy (no NaN, psi in [0,1], normalized phases, and the lever rule z=(1-psi)x+psi y).
Measured: 3000/3000 random flash states survived every invariant (worst lever-rule residual 1.6e-13, tol 1e-06); 2000/2000 Rachford-Rice cases clean
Property-based testing of the (T,P) flash + Rachford-Rice; deterministic (seeded), run in CI and expandable to millions of states offline with no cloud infra.
Validation history
Every milestone adds cited validations, fixes regressions, improves convergence, or reproduces new literature — the honest "quality is increasing" signal, not one snapshot.
- Numerical-robustness leaderboard2026-08
- Added
- Published robustness leaderboard: near-critical cryogenic (P,H) flash, wide-boiling spurious-root bubble point, Rachford-Rice edges, ethanol-water azeotrope pinch, tight ammonia recycle, and structural singular-Jacobian detection — each run live through the real solver with its measured outcome.
- MESH Levenberg-Marquardt globalization2026-07-30
- Added
- Near-azeotropic extractive-column convergence guard (CO2/ethane with an n-decane entrainer) in the inside-out MESH Newton.
- Fixed
- Unconverged distillation columns now return a physically self-consistent best-iterate partial (every stage T is its own composition's bubble point), not the last swing.
- Convergence
- Levenberg-Marquardt globalization crosses the near-pinch region where the pure-Newton line search stalled; co2-ethane and light-ends columns that previously fell to the successive-substitution fallback now converge to ~1e-6.
- Component-balance convergence gate + mass-conservation audit2026-07-28
- Added
- Whole-catalog per-unit mole-conservation audit with an executable ledger of known internal leaks; a column is accepted as converged only if its global feed-vs-products component balance closes.
- Fixed
- Indefensible columns (17-63% single-component imbalance) are now honestly reported unconverged instead of a false 'converged'.
- Complex-op cited-reference gates (SMB / Petlyuk / VPSA)2026-07-28
- Added
- Simulated Moving Bed vs triangle theory (Storti/Mazzotti/Morbidelli 1993). · Petlyuk dividing-wall energy saving against Triantafyllou-Smith (1992), 20-30% band. · VPSA 13X N2/O2 Langmuir loadings against Data in Brief (2020), within 5%.
- Fixed
- Cryogenic (P,H) flash subcooled floor lowered 180 K -> 90 K (LNG cold end no longer clamped to a wrong temperature). · Wide-relative-volatility bubble point no longer collapses to the heaviest pure component's spurious saturation root.
- Literature
- Triangle theory; Triantafyllou-Smith DWC saving; 13X adsorption isotherms.
- Thermodynamic-rigor gates2026-07
- Added
- PC-SAFT bubble-T + liquid density vs NIST WebBook / Gross & Sadowski (2001). · Pitzer NaCl activity coefficient vs Hamer & Wu (1972), ~0.3% to I=6 mol/kg. · Herington (1951) thermodynamic-consistency test on every cited VLE set. · UNIFAC liquid-liquid equilibrium vs Sorensen & Arlt DECHEMA solubility bounds. · Rigorous MESH column cross-checked against the Fenske minimum-stages shortcut.
- Literature
- DECHEMA / Carey & Lewis (1932) ethanol-water VLE + azeotrope; Dunlop (1948) methanol-water; Perry's benzene-toluene; IAPWS-IF97 water saturation.
Reproduce every number
Nothing above is pinned — it's recomputed live from the solver on every page load. We publish our inputs, our numbers, and the citation so the comparison is reproducible. We don't publish competitor numbers we didn't measure. To benchmark a competitor honestly: build the identical case in your own simulator (same components, package family, and conditions), read off the same quantity, and compare against the cited experimental reference — the ground truth both simulators are measured against.
# reproduce our numbers locally (no API key needed)
uv run python scripts/reproduce_validation.py
# or drive the same case through the Python SDK
from flowsim.sdk import FlowSimClient
client = FlowSimClient("https://maximalabs.io")
# ...build the cited case, run, and compare against the reference