Skip to content

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

Bubble point of 50 wt% MEG = 107.4 C
Bubble point of water      = 99.98 C

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

API members

Public members declared by this class. Inherited members are documented on the base classes.

Constructors

GlycolPropertyPackage()
public GlycolPropertyPackage()
Public Sub New()

GlycolPropertyPackage(bool)
Parameter Type Description
comode Boolean
public GlycolPropertyPackage(bool comode)
Public Sub New(comode As 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[]
public override bool CheckMissingInteractionParameters(double[] Vx)
Public Overrides Function CheckMissingInteractionParameters(Vx As Double()) As Boolean

Clone()
public override PropertyPackage Clone()
Public Overrides Function Clone() As PropertyPackage

ContainsGlycol(): Identifies whether the stream contains glycol compounds.

Identifies whether the stream contains glycol compounds.

public bool ContainsGlycol()
Public Function ContainsGlycol() As Boolean

GetArguments(): Returns CAS numbers as the argument for the NRTL model.

Returns CAS numbers as the argument for the NRTL model.

public override object GetArguments()
Public Overrides Function GetArguments() As Object

ReturnInstance(string)
Parameter Type Description
typename String
public override object ReturnInstance(string typename)
Public Overrides Function ReturnInstance(typename As String) As Object

RunPostMaterialStreamSetRoutine()
public override void RunPostMaterialStreamSetRoutine()
Public Overrides Sub RunPostMaterialStreamSetRoutine()

SaveData()
public override List<XElement> SaveData()
Public Overrides Function SaveData() As List(Of XElement)