Alberto Mazzola Engineering · Technical summary

AME DewPoint — capability & validation summary

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).

1. Speed

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.

OperationGasVLe (via COM)AME DewPoint (in-process) Ratio, as callable
Water equilibrium8.2 /s (122 ms) 12,457 /s (0.080 ms)~1,500×
Dew point7.1 /s (140 ms) 18,691 /s (0.054 ms)~2,600×
Flash7.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.

2. Agreement with the commercial reference

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⁻⁴.

3. Agreement with experiment

Agreement with another program is not accuracy. These are measured laboratory data, transcribed digit-exact from the primary literature and committed as acceptance gates.

SystemDataResult
Water dew pointIAPWS saturation, ISO 18453 exact to reference precision
Calorific value / Wobbe (gross)ISO 6976 Annex D examples exact ≤ 1×10⁻⁴
Net calorific value / net WobbeISO 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 pointWarner / 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 anchors1.85 %
Hydrates, CO₂/CH₄ mixtures42 anchors2.92 %
Hydrates, real natural gases33 anchors, Deaton & Frost A–F 6.25 % / 0.552 K
Hydrates, isobutane17 anchors9.10 % / 0.486 K
Methanol inhibitionMunck Figs 3/4, Hammerschmidt ΔT within ±5 K over 10–50 wt%

Where the library measurably exceeds the commercial engine on experimental data

4. Honest limits

These are published deliberately. A library whose failure mode is "plausible wrong numbers" earns trust by naming its own boundaries.

5. How to verify any of it

Nothing here requires trusting a summary:

6. Summary

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.