Glycol (NRTL)¶
DWSIM Plus
Available with a DWSIM Plus (Patreon) subscription.
Glycol property package for natural gas dehydration and hydrate inhibition. Phase equilibrium model: γ-φ: liquid activity coefficients via NRTL with dedicated glycol BIP database, vapor fugacity handled by the base class (PR EOS or ideal). Applicable systems: EG / DEG / TEG + water + light hydrocarbons (C1-C7+) + CO2 + H2S + N2 Typical applications: - Natural gas dehydration (TEG absorber + regenerator) - MEG/EG hydrate inhibition injection - Glycol recovery columns
DWSIM.Extensions.PropertyPackages.Electrolytes.Glycol.GlycolPropertyPackage
Assembly DWSIM.Extensions.PropertyPackages.Electrolytes.dll · Object ← PropertyPackage ← ActivityCoefficientPropertyPackage ← GlycolPropertyPackage
Name in the flowsheet Glycol (NRTL) · FluentAPI PropertyPackages.Plus.Glycol
Scope¶
The package is meant for natural gas dehydration with triethylene glycol (TEG absorber and regenerator),
hydrate inhibition with monoethylene glycol (MEG injection and MEG regeneration) and glycol recovery. It is
a γ-φ package: the liquid takes activity coefficients from an NRTL model with a binary parameter
database of its own, and the vapor is ideal or Peng-Robinson according to VaporPhaseFugacityCalculationMode.
Liquid fugacities use the vapor pressure with a Poynting correction, or Henry's law for the supercritical
gases. Enthalpies and transport properties are those of the standard activity-coefficient packages
(see NRTL); the liquid density comes from the compounds' density correlations
(Rackett_and_ExpData).
The NRTL parameters are τij = aij + bij/T and a symmetric αij, looked up by the CAS numbers of the compounds. The database covers:
| Pairs | Source |
|---|---|
| Water with EG, DEG and TEG | regressed to isobaric VLE data (NIST ThermoML): Kamihama et al. (2012), Zhang et al. (2016) and Chouireb et al. (2018), with a TEG regenerator point (98.9 wt% boiling at 204 °C, 1 atm) |
| EG, DEG and TEG with each other | DECHEMA (estimated) |
| Water with methane, ethane, propane, n-butane, n-hexane, benzene, toluene | Voutsas et al. (2004) |
| EG and TEG with the same hydrocarbons | Folas et al. (2006); Parrish (1986) |
| DEG with the same hydrocarbons | estimated from Folas et al. (2006) |
| CO2 and H2S with EG, DEG, TEG and water | Jou et al. (1987); DECHEMA |
| N2 with water and the glycols | DECHEMA (estimated) and estimates |
The water-glycol pairs reproduce the boiling points of the data within 0.6 to 0.9 K on average; at 1 atm, 99 wt% TEG boils at 207.6 °C and 80 wt% MEG at 123.7 °C. A pair that is not in the database is ideal (τ = 0). The model supplies closed-form temperature and composition derivatives of ln γ, which the flash and the rigorous columns use.
Limitations¶
- The parameters are found by CAS number: the glycols must be the database compounds ethylene glycol (107-21-1), diethylene glycol (111-46-6) and triethylene glycol (112-27-6).
- Pairs outside the table, such as heavier hydrocarbons with the glycols, fall back to ideal mixing.
- There are no electrolytes: salts carried by produced water in MEG loops need an electrolyte package.
Example¶
This code runs on every build of this site, and the output below is what it printed.
fs = (Flowsheet.Create("GlycolExample")
.WithCompounds("Water", "Ethylene glycol")
.WithPropertyPackage(PropertyPackages.Plus.Glycol))
# Rich MEG from a hydrate-inhibition loop, 50 wt% MEG, at its bubble point at 1 atm
rich = (fs.AddMaterialStream("Rich MEG").WithPressure(Q.Bar(1.01325)).WithVaporFraction(0.0)
.SetCompoundMassFlow("Ethylene glycol", 0.5)
.SetCompoundMassFlow("Water", 0.5))
# Pure water at its bubble point, for comparison
water = (fs.AddMaterialStream("Water").WithPressure(Q.Bar(1.01325)).WithVaporFraction(0.0)
.SetCompoundMassFlow("Water", 1.0))
fs.Solve()
s = rich.Object
print(f"Bubble point of 50 wt% MEG = {s.Phases[0].Properties.temperature - 273.15:.1f} C")
print(f"Bubble point of water = {water.Object.Phases[0].Properties.temperature - 273.15:.2f} C")
Output
DWSIM 10.2.11.0, generated 2026-10-08.
Property methods¶
How the package calculates each property, as it reports it in PropertyMethodsInfo (the property package editor shows the same list).
| Property | Method |
|---|---|
| Vapor fugacity | Ideal / Peng-Robinson EOS |
| Liquid fugacity | NRTL Activity Coefficient + Poynting + Vapor Pressure / Henry's Law |
| Vapor enthalpy, entropy, Cp/Cv | Ideal Gas / Lee-Kesler / Excess |
| Liquid enthalpy, entropy, Cp/Cv | Ideal Gas / Lee-Kesler / Excess |
| Vapor density | Ideal Gas / Peng-Robinson EOS |
| Liquid density | Rackett / COSTALD / Experimental |
| Vapor viscosity | Experimental / Lucas / Jossi-Stiel-Thodos |
| Liquid viscosity | Experimental / Letsou-Stiel |
| Vapor thermal conductivity | Experimental / Ely-Hanley |
| Liquid thermal conductivity | Experimental / Latini |
| Surface tension | Experimental / Brock-Bird |
| Solid density | Experimental Data / User-Defined |
| Solid enthalpy, entropy, Cp/Cv | Experimental Solid Cp / From Liquid Phase Enthalpy + Enthalpy of Fusion |
Default flash algorithm: Universal.
Configuration saved with the flowsheet¶
The package writes its settings to the simulation file (SaveData) and reads them back on load (LoadData). The elements below are the ones this package adds to those of every property package, as written for the example.
This package adds no elements of its own.
Settings common to every property package, as saved for the example
| Element | Value |
|---|---|
Type |
75 characters |
ComponentName |
Glycol (NRTL) |
ComponentDescription |
111 characters |
Tag |
Glycol (NRTL) |
UseHenryConstants |
true |
AutoEstimateMissingNRTLUNIQUACParameters |
true |
UseImmiscibleListForLiquid2InitialEstimates |
true |
SingleCompoundCheckThreshold |
0.99999 |
OverrideKvalFugCoeff |
false |
OverrideEnthalpyCalculation |
false |
OverrideEntropyCalculation |
false |
LiquidDensityCalculationMode_Subcritical |
Rackett_and_ExpData |
LiquidDensityCalculationMode_Supercritical |
Rackett_and_ExpData |
LiquidDensity_CorrectExpDataForPressure |
true |
LiquidDensity_UsePenelouxVolumeTranslation |
true |
LiquidViscosityCalculationMode_Subcritical |
ExpData |
LiquidViscosityCalculationMode_Supercritical |
Letsou_Stiel |
LiquidViscosity_CorrectExpDataForPressure |
true |
LiquidViscosity_MixingRule |
MoleAverage |
VaporPhaseFugacityCalculationMode |
Ideal |
SolidPhaseFugacityCalculationMethod |
FromLiquidFugacity |
SolidPhaseFugacity_UseIdealLiquidPhaseFugacity |
false |
SolidPhaseEnthalpy_UsesCp |
false |
EnthalpyEntropyCpCvCalculationMode |
ExpData |
LiquidEnthalpyEntropyCpCvCalculationMode_EOS |
EOS |
LiquidFugacity_UsePoyntingCorrectionFactor |
true |
ActivityCoefficientModels_IgnoreMissingInteractionParameters |
false |
IgnoreVaporFractionLimit |
false |
IgnoreSalinityLimit |
false |
CalculateAdditionalMaterialStreamProperties |
true |
FlashCalculationApproach |
NestedLoops |
DisplayMissingCompoundPropertiesWarning |
false |
ForcedSolids |
[] |
PropertyOverrides |
{} |
FlashSettings |
36 Setting entries |
Learn more¶
-
User guide
-
Used with
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
GlycolPropertyPackage(bool)
| Parameter | Type | Description |
|---|---|---|
comode |
Boolean |
Methods¶
CheckMissingInteractionParameters(double[]): Check for missing interaction parameters.
Check for missing interaction parameters. For glycol systems, we allow missing pairs (treated as ideal). Returns true (no missing critical parameters) to avoid blocking calculations.
| Parameter | Type | Description |
|---|---|---|
Vx |
Double[] |
Clone()
ContainsGlycol(): Identifies whether the stream contains glycol compounds.
Identifies whether the stream contains glycol compounds.
GetArguments(): Returns CAS numbers as the argument for the NRTL model.
Returns CAS numbers as the argument for the NRTL model.
ReturnInstance(string)
| Parameter | Type | Description |
|---|---|---|
typename |
String |
RunPostMaterialStreamSetRoutine()