A five-minute read. Every number below is measured and reproducible from the source repository; nothing is a vendor claim. Where the library is weaker than the alternative, it says so.
What it is. A .NET 10 library that computes gas-quality phase behaviour for
natural-gas metering and transport: water dew point, whole-mixture (hydrocarbon) dew point,
cricondentherm and cricondenbar, phase envelope, hydrate formation curves with inhibitor
depression, calorific value / Wobbe / density, and reference compressibility. Zero dependencies in
the core, immutable and thread-safe, portable to server, edge, WASM and portal use. Every
coefficient traces to a citable source with a stated confidence rating; physical failure is a
result (NoSolution), never an exception, and every result carries its own
validity warnings.
Standards implemented: ISO 18453 (water dew point, GERG-water), ISO 6976:2016 (CV, Wobbe, density), ISO 12213-2 / AGA8-Detail and ISO 20765-2 / GERG-2008 (compressibility), Peng-Robinson and Soave-Redlich-Kwong with Michelsen stability, van der Waals-Platteeuw hydrates (Munck 1988, Parrish-Prausnitz 1972, Lakhlifi-Dahoo 2015, Klauda-Sandler 2003).
Measured against GasVLe v5.15, the incumbent commercial engine, on identical calculations. The ratio column compares end-to-end throughput as each engine is actually callable — the reference engine through its COM automation interface, this library in-process — so it reflects integration cost as well as numerical work.
| Operation | GasVLe (via COM) | AME DewPoint (in-process) | Ratio, as callable |
|---|---|---|---|
| Water equilibrium | 8.2 /s (122 ms) | 12,457 /s (0.080 ms) | ~1,500× |
| Dew point | 7.1 /s (140 ms) | 18,691 /s (0.054 ms) | ~2,600× |
| Flash | 7.5 /s (133 ms) | 18,950 /s (0.053 ms) | ~2,500× |
| Flash, 8 threads | — | 235,904 /s | — |
On a heavier real-world load — 2,000,000 dew points over 13–14-component mixtures — the library completed in 296.7 s (6,742 solves/s) with zero failures. The same work through the commercial engine's COM interface would take roughly 8–9 days.
Why it matters operationally: a portal polling 20 streams every 30 s spends ~0.001 s/cycle in the library instead of ~3 s, and a full phase envelope renders interactively rather than as a batch job.
441,072 paired whole-mixture dew points, model-matched (both engines on Peng-Robinson, kij = 0), across eight base mixtures spanning perturbed real metering streams and space-filling synthetic gases. Pooled mean |ΔT| 0.3418 K.
This figure moved against us, and that is the point. An earlier version of this page published 0.284 K over 200,000 pairs. When the campaign was completed to all eight base mixtures, the pooled mean rose to 0.3418 K over 441,072 pairs — the old number was a property of one base mixture published as a property of the campaign, roughly 3.5 % flattering. It was corrected at the source and then here. A supplier who only ever revises numbers downward is not measuring.
What this corpus is and is not. It is an agreement corpus: it measures where two engines return the same answer, never which one is right. Accuracy against measured data is section 3 and is a different corpus entirely — unaffected by this correction.
Declining to answer. Across the completed campaign the one-sided failures split 888 ours against 2,571 the reference engine's — it declines about three times as often as we do, concentrated at 50 bar on one reference gas. Stated with its shape rather than as a general robustness claim, because that is all the evidence supports.
The chain is closed end to end. On real metering streams (site compositions from production gas chromatographs) our Peng-Robinson sits ≤ 0.3 K from theirs at line pressure, our SRK ≤ 0.21 K from their RKS — an independent cross-check through a second equation of state — and cricondentherm agrees to ≤ 0.26 K. The commercial engine in turn reproduces the legacy portal's stored Modbus registers digit-for-digit (−33.27822 °C), so library → reference engine → deployed portal is verified at every link.
Other classes, from an earlier 1,300-comparison campaign: water saturation content agrees to 0.037 % mean, water dew temperature to 13 mK mean, flash phase compositions to ~10⁻³, ISO 6976 mass/energy properties to 10⁻⁴.
Agreement with another program is not accuracy. These are measured laboratory data, transcribed digit-exact from the primary literature and committed as acceptance gates.
| System | Data | Result |
|---|---|---|
| Water dew point | IAPWS saturation, ISO 18453 | exact to reference precision |
| Calorific value / Wobbe (gross) | ISO 6976 Annex D examples | exact ≤ 1×10⁻⁴ |
| Net calorific value / net Wobbe | ISO 6976 Annex D Example 3, 15/15 °C | +9.3×10⁻⁸ / −1.1×10⁻⁷ — below the printed precision of ISO's own anchor |
| Hydrocarbon dew point | Warner / BSEE-SwRI gravimetric gases | within the report's own ≈14 K band |
| Hydrates, pure CH₄ | 28 anchors, 5 datasets | 5.64 % pressure AAD, 0.698 K — the model's own published class (0.66 K) |
| Hydrates, CO₂ | 9 anchors | 1.85 % |
| Hydrates, CO₂/CH₄ mixtures | 42 anchors | 2.92 % |
| Hydrates, real natural gases | 33 anchors, Deaton & Frost A–F | 6.25 % / 0.552 K |
| Hydrates, isobutane | 17 anchors | 9.10 % / 0.486 K |
| Methanol inhibition | Munck Figs 3/4, Hammerschmidt | ΔT within ±5 K over 10–50 wt% |
These are published deliberately. A library whose failure mode is "plausible wrong numbers" earns trust by naming its own boundaries.
Nothing here requires trusting a summary:
dotnet run --project tools/Ame.DewPoint.Verification — a dependency-free
acceptance runner: 416 physics checks, check-by-check output, exit code
0 = green.dotnet test — 739 tests, including every experimental anchor
above.docs/GasVleComparison.md — the full head-to-head, §§2–11, with raw job outputs.docs/Provenance.md — every coefficient, its source, its confidence rating and
its open gaps.On the measurement that matters for custody transfer and pipeline operation — the whole-mixture dew point — this library agrees with the established commercial engine to 0.28 K on real metering streams, computes it orders of magnitude faster as callable, and never fails where the reference succeeds. On hydrates it is validated against laboratory data rather than against another program, and on inhibited systems it is measurably closer to experiment. Where it is behind, this document says where, and the repository proves it.