Dew-point calculations locate a phase-appearance boundary for a defined gas composition and pressure. They are sensitive to sampling, water or heavy-end content, model selection, binary-interaction parameters, and the specified pressure. Treat NeqSim results as calculation evidence, not as proof that a sample, measurement procedure, or delivery point complies with a standard or contract.
Choose the maintained calculation path
| Engineering question | Current class | Current boundary |
|---|---|---|
| Water dew point at one pressure | Standard_ISO18453 |
Converts a non-GERG-water input composition to an internal SystemGERGwaterEos and runs waterDewPointTemperatureFlash() |
| Legacy database-backed water-dew-point rows | Draft_ISO18453 |
Retained for compatibility in BaseContract; new direct calculations should use Standard_ISO18453 |
| Hydrocarbon dew point at the class’s fixed pressure | BestPracticeHydrocarbonDewPoint |
Copies non-water components into an internal SRK system, applies mixing rule 2, and calculates at 50 bara |
| Dew-point curve, cricondentherm, or cricondenbar | Phase-envelope or saturation operations | The fixed-pressure standards classes do not calculate these envelope extrema |
A dew point at 50 bara is not the cricondentherm. The cricondentherm is the maximum temperature on the complete phase envelope and generally occurs at a pressure determined by the envelope calculation.
Water dew point with Standard_ISO18453
The current class is documented in source as superseding
Draft_ISO18453. It accepts any SystemInterface; when the input is not
already a GERG-water system, the constructor copies the phase-0 component names
and mole amounts into a new SystemGERGwaterEos.
The calculation pressure is absolute pressure in bara. Use setPressure(double)
or setReferencePressure(double) before calculate(). The primary result key
is dewPointTemperature; the no-unit getter returns degrees Celsius, while the
two-argument getter recognizes "K" and "F" conversions.
Executable Java 8 example
import neqsim.standards.gasquality.Standard_ISO18453;
import neqsim.thermo.system.SystemGERGwaterEos;
import neqsim.thermo.system.SystemInterface;
SystemInterface wetGas = new SystemGERGwaterEos(268.15, 20.0);
wetGas.addComponent("methane", 0.9);
wetGas.addComponent("water", 0.0000051);
wetGas.createDatabase(true);
wetGas.setMixingRule(8);
wetGas.init(0);
Standard_ISO18453 waterDewPoint = new Standard_ISO18453(wetGas);
waterDewPoint.setPressure(70.0);
waterDewPoint.calculate();
double waterDewPointC =
waterDewPoint.getValue("dewPointTemperature", "C");
double calculationPressureBara = waterDewPoint.getValue("pressure");
For the repository fixture, the result is approximately -28.493 °C at 70 bara. That number validates the documented API and bundled model behavior; it is not a generic natural-gas expectation.
Water-dew-point contract decisions
Apply the governing limit explicitly in the project layer:
double maximumWaterDewPointC = -8.0;
boolean withinWaterDewPointLimit =
Double.isFinite(waterDewPointC)
&& waterDewPointC <= maximumWaterDewPointC;
isOnSpec() compares the calculated value with
getSalesContract().getWaterDewPointTemperature(). The default embedded
BaseContract limit is not evidence for a particular delivery point.
setDewPointTemperatureSpec(double) stores a separate class field that the
current isOnSpec() implementation does not read. Prefer the explicit
comparison above unless a verified ContractInterface has been attached.
The direct operation solves equality of water fugacity between the feed gas and
a pure incipient condensed phase. It uses a bracketed temperature solve with a
relative fugacity criterion; an exhausted iteration limit is a failure, not a
dew point. Positive water content and positive finite absolute pressure are
required. The legacy direct pure-MEG calculation is also supported. The standard
classes log a failed calculation and return NaN, so isOnSpec() is false.
The bracket refinement reuses its endpoint residuals for secant steps and
bisects at least every second trial. Invalid or out-of-bracket predictions
also use bisection. Acceptance still requires a logarithmic fugacity residual
no greater than 1e-9; this acceleration does not change the condensed-phase
reference, standards model, pressure or composition treatment.
Ice, liquid water, and applicability
ISO 18453:2004, clauses 3–5, uses separate water attraction functions for vapour pressure over ice below 273.16 K and over liquid water above it. A subzero ISO result therefore must not be compared with a supercooled-liquid dew point without identifying the condensed phase. Hydrate equilibrium is another, separate boundary.
The validated working range is −15 to +5 °C and 5 to 100 bara, subject to the standard’s composition limits. The extended range is −50 to +40 °C and 1 to 300 bara, with unknown correlation uncertainty. Thus −26 °C is outside the validated range but inside the extended range. Numerical convergence does not extend the model’s engineering validity; do not use extrapolation outside the extended range as an ISO-qualified result.
A result differing from an ideal-gas estimate alone does not identify a coding error. Use the same ice/liquid reference and check fugacity equilibrium, model parameters and applicability first. The direct operation retains the existing pure condensed-phase approximation; it does not model dissolved gas, mixed water/glycol liquids, or hydrates. Use and qualify the multiphase/CPA or hydrate operation for those questions. The ISO-model low-temperature deviations from measurements are discussed by Rajzinger (2012), Table 2; matching that model is distinct from matching experimental data.
Temperature-derivative consistency
The GERG-water attraction function uses a fourth-power term. Its first and
second temperature derivatives must differentiate that same expression, for
both the generic diffalphaT/diffdiffalphaT APIs and the legacy GERG-specific
aliases. All paths select the ice coefficients below 273.16 K and liquid-water
coefficients at or above that temperature. The derivatives are branch-local;
a finite-difference check must not straddle the coefficient switch.
The former implementation differentiated a cubic term and inherited ordinary PR alpha derivatives through the generic APIs. Recalculate derivative-dependent properties, including enthalpy and heat capacity, obtained with that version. The direct bracketed dew-point operation does not use those temperature derivatives. Its existing control values are retained, apart from the corrected coefficient selection in the narrow interval 273.15–273.16 K.
Regression coverage compares both derivatives with finite differences, checks
the mixed-gas fugacity derivatives with ThermodynamicModelTest, and compares
synthetic methane/ethane/propane dew points with an independent PR-root
calculation using ISO 18453 Table 2–3 parameters. The bundled component database
uses slightly different constants; the comparison tolerance is a numerical
fixture tolerance, not the standard’s experimental correlation uncertainty.
This establishes the checked mathematical identities and model comparisons;
full ISO conformity still requires the governing standard’s controlled examples
and complete composition and applicability checks.
Trace-water process analyser
WaterDewPointAnalyser’s CPA method solves fixed-feed-gas equilibrium against
a water-rich liquid, including dissolved gas, using Statoil SRK-CPA. It uses
metastable liquid water below freezing and excludes solid and hydrate searches.
Unlike the former phase-appearance search, its stopping criterion is water
fugacity equilibrium; the amount of an incipient phase does not set the answer.
Failed measurements return NaN, and the process stream remains unchanged.
The direct API is waterDewPointTemperatureFlash(true). It requires a
non-reacting gas and a liquid with more than 50 mol% water. Dissolved components
satisfy their gas/liquid fugacity equations while water closes the liquid
composition. This keeps the solve on the aqueous branch rather than accepting
the trivial gas-composition root. It does not check global stability against
other liquid phases. Select the analyser’s multiphase method on a CPA stream
when hydrocarbon liquids or glycol-rich liquids must be included. The existing
no-argument direct operation retains its pure-condensate reference.
For a synthetic gas containing 95% methane before moisture substitution, 3% ethane, 1% nitrogen and 1% CO2, 5 ppmv water at 43 bara gives approximately −43.90 °C with the mixed-liquid CPA method. GERG-water gives approximately −34.50 °C. These numerical fixtures use different condensed-phase models; agreement within 3 °C is not a valid universal acceptance criterion. Tests cover 1–100 ppmv at 43 and 70 bara and independently reinitialize both EOS phases to check every component’s fugacity equality. This establishes numerical equilibrium, not experimental accuracy of either low-temperature model.
Before the convergence correction, the fixed temperature step scaled with absolute water mole fraction and could stop at 10,000 iterations far from equilibrium, especially in dry gas. Earlier stored dew-point values from this operation should be recalculated. Retain the input composition, water basis, pressure, model, NeqSim version and convergence diagnostics with each result.
Screen an extractive analyser sample system
A dew-point calculation alone does not prove that an extractive analyser sees the
process gas. The public AnalyserSampleSystem class added in
#4715 screens four common
sample-system effects:
- water or hydrocarbon condensation in the high-pressure tube;
- transport lag from the process tap to the regulator;
- minimum water-film dry-out time at a stated flow and temperature;
- glycol-film persistence when a CPA fluid contains the selected glycol.
Flows are normal litres per hour at 0 °C and 1.01325 bara. Pressures are absolute bara, tube dimensions are metres, and temperatures supplied to the sample-system setters are degrees Celsius. The water model uses Bukacek. Hydrocarbon dew point uses a NeqSim flash after removing water and glycols. Film calculations assume a saturated outlet: water dry-out is therefore a lower bound for the stated film mass and flow. Glycol dry-out uses a CPA flash with a vapour-pressure fallback; it is not a sensor-recovery guarantee.
Executable Java 8 screening example
import neqsim.process.measurementdevice.AnalyserSampleSystem;
import neqsim.thermo.system.SystemInterface;
import neqsim.thermo.system.SystemSrkCPAstatoil;
import neqsim.thermo.util.empiric.BukacekWaterInGas;
public class AnalyserSampleSystemGuideExample {
public static void main(String[] args) {
double pressureBara = 63.0;
double waterMoleFraction =
BukacekWaterInGas.getWaterInGas(273.15 - 40.0, pressureBara);
double dryMoleFraction = 1.0 - waterMoleFraction;
SystemInterface sampleGas =
new SystemSrkCPAstatoil(273.15 + 25.0, pressureBara);
sampleGas.addComponent("methane", 0.85 * dryMoleFraction);
sampleGas.addComponent("ethane", 0.08 * dryMoleFraction);
sampleGas.addComponent("propane", 0.04 * dryMoleFraction);
sampleGas.addComponent("n-butane", 0.02 * dryMoleFraction);
sampleGas.addComponent("n-hexane", 0.01 * dryMoleFraction);
sampleGas.addComponent("water", waterMoleFraction);
sampleGas.addComponent("TEG", 0.0);
sampleGas.setMixingRule(10);
AnalyserSampleSystem sampleSystem =
new AnalyserSampleSystem(sampleGas);
sampleSystem.setTubeTemperatureC(20.0);
sampleSystem.setRegulatorOutletPressureBara(3.5);
sampleSystem.setFlowsNlPerHour(15.0, 90.0);
sampleSystem.setTubeGeometry(1.4e-3, 9.0);
double tapDewPointC = sampleSystem.getWaterDewPointAtTapC();
double condensationMarginK =
sampleSystem.getWaterCondensationMarginK();
double transportLagSeconds = sampleSystem.getTransportLagSeconds();
double waterFilmDryOutHours =
sampleSystem.getWaterFilmDryOutTimeHours(
1.0e-3, 60.0, 2.0, 15.0);
if (Math.abs(tapDewPointC + 40.0) > 0.05
|| sampleSystem.isWaterCondensingInTube()
|| Math.abs(condensationMarginK - 60.0) > 0.1
|| !Double.isFinite(transportLagSeconds)
|| transportLagSeconds <= 1.0
|| transportLagSeconds >= 600.0
|| !Double.isFinite(waterFilmDryOutHours)
|| waterFilmDryOutHours <= 0.0) {
throw new IllegalStateException(
"Sample-system screening is outside the documented bounds");
}
}
}
This synthetic dry-gas case should give a water dew point near −40 °C at the tap, a positive condensation margin near 60 K, no water condensation, and a finite transport lag. Those checks validate the documented API and qualitative engineering bounds; they do not validate an installed sample system.
Before using the result, replace the synthetic composition and geometry with controlled data and verify the process tap, heat tracing, regulator, bypass, analyser flow, material compatibility, calibration, response test, uncertainty, and governing measurement procedure. A positive margin is a screening result, not evidence of representative sampling. Do not interpret the lower-bound film time as an allowed restart delay or the glycol estimate as a maintenance interval.
Hydrocarbon dew point with BestPracticeHydrocarbonDewPoint
The constructor copies every phase-0 component except exact component name
water into a new SystemSrkEos, applies mixing rule 2, and initializes an
internal calculation system. It does not reuse the input fluid’s EOS or fitted
binary-interaction parameters.
The current implementation has a fixed specPressure of 50.0 bara.
calculate() resets the internal system to that pressure.
The inherited setReferencePressure(double) method does not change
specPressure, and changing the pressure of the input fluid after construction
does not change the calculation pressure.
Executable Java 8 example
import neqsim.standards.gasquality.BestPracticeHydrocarbonDewPoint;
import neqsim.thermo.system.SystemInterface;
import neqsim.thermo.system.SystemSrkEos;
SystemInterface richGas = new SystemSrkEos(293.15, 70.0);
richGas.addComponent("methane", 0.85);
richGas.addComponent("ethane", 0.05);
richGas.addComponent("propane", 0.03);
richGas.addComponent("i-butane", 0.01);
richGas.addComponent("n-butane", 0.015);
richGas.addComponent("i-pentane", 0.005);
richGas.addComponent("n-pentane", 0.005);
richGas.addComponent("n-hexane", 0.003);
richGas.addComponent("nitrogen", 0.02);
richGas.addComponent("CO2", 0.012);
richGas.setMixingRule("classic");
BestPracticeHydrocarbonDewPoint hydrocarbonDewPoint =
new BestPracticeHydrocarbonDewPoint(richGas);
hydrocarbonDewPoint.calculate();
double hydrocarbonDewPointC =
hydrocarbonDewPoint.getValue(
"hydrocarbondewpointTemperature", "C");
double calculationPressureBara =
hydrocarbonDewPoint.getValue("pressure");
The result should be finite and the reported calculation pressure is 50 bara.
The two-argument getter does not currently convert hydrocarbon-dew-point units;
use "C" and report degrees Celsius.
Do not use BestPracticeHydrocarbonDewPoint.isOnSpec() for a hydrocarbon limit.
The current method compares the hydrocarbon result with the attached contract’s
water-dew-point temperature. Apply the verified hydrocarbon limit explicitly:
double maximumHydrocarbonDewPointC = -2.0;
boolean withinHydrocarbonDewPointLimit =
Double.isFinite(hydrocarbonDewPointC)
&& hydrocarbonDewPointC <= maximumHydrocarbonDewPointC;
The value above only illustrates caller-owned comparison logic. Replace it with the controlled limit, pressure range, uncertainty, and rounding rules from the governing agreement.
Curves and envelope extrema
Do not build a pressure curve by changing the source fluid pressure and repeatedly
constructing BestPracticeHydrocarbonDewPoint; every instance still calculates
at 50 bara. For a curve or envelope extremum, use a thermodynamic phase-envelope
or saturation workflow that exposes pressure as a calculation input, then
validate the selected EOS and characterization against measured dew-point data.
For hydrocarbon-dew-point work, preserve and qualify:
- representative sampling and recombination;
- C6+ or plus-fraction characterization;
- selected EOS, volume translation, and binary-interaction parameters;
- water, glycol, methanol, and other excluded or separately modeled components;
- convergence branch and phase-appearance interpretation;
- pressure and temperature measurement uncertainty.
For water-dew-point work, also qualify water-content measurement, acid gases, glycols or inhibitors, salinity where relevant, and the applicability range of the chosen water model.
Reporting and engineering boundary
Every reported result should include:
- sample or case identity and composition basis;
- NeqSim version and class name;
- EOS, mixing rule, characterization, and parameter provenance;
- absolute calculation pressure in bara;
- dew-point temperature and unit;
- convergence or failure diagnostics;
- governing standard or contract edition from a controlled source;
- project limit, uncertainty, rounding rule, and accountable reviewer.
Class names such as Standard_ISO18453 do not establish that sampling,
instrumentation, calibration, data reduction, or the complete requirements of a
licensed standard have been satisfied.