Skip to content

NRTL

Non-Random Two-Liquid (NRTL) activity coefficient model for the liquid phase, with binary parameters from the ChemSep databank, an ideal or Peng-Robinson vapor phase and vapor pressures from the compound correlations. For polar and strongly non-ideal liquid mixtures at low to moderate pressure, including partially miscible ones.

DWSIM.Thermodynamics.PropertyPackages.NRTLPropertyPackage
Assembly DWSIM.Thermodynamics.dll · Object ← PropertyPackage ← ActivityCoefficientPropertyPackage ← NRTLPropertyPackage
Name in the flowsheet NRTL · FluentAPI PropertyPackages.NRTL

Scope

An activity coefficient model for the liquid phase of polar and strongly non-ideal mixtures at low to moderate pressure: alcohols, ketones, esters, acids and water, azeotropic and extractive distillation, solvent recovery, and systems with two liquid phases. The liquid fugacity is fiL = xiγiPisat times the Poynting factor, with the vapor pressure from the compound correlation; gases above their critical temperature dissolve by Henry's law.

Renon and Prausnitz built the Non-Random Two-Liquid equation on the local composition concept. Unlike the Wilson equation it describes partially miscible liquids, so the same parameters give vapor-liquid and liquid-liquid equilibrium. For each pair,

τij = (Aij + BijT + CijT2)/(RT), Gij = exp(-αijτij),

with A in cal/mol and the non-randomness parameter αij = αji. With the B and C terms at zero this is the classic form τij = aij/RT.

Parameters. A12, A21, B, C and α of each pair come from the ChemSep databank and a set for biodiesel systems, shipped with DWSIM. When a pair is missing and AutoEstimateMissingNRTLUNIQUACParameters is on (the default), the package estimates it from UNIFAC activity coefficients; a pair in which one compound boils below 200 K gets near-ideal values. The parameters can be edited in the package editor or set from code with ConfigureNRTL(c => c.WithBinary(c1, c2, a12, a21, alpha12)), and are saved with the flowsheet.

Vapor phase and caloric properties. The vapor is an ideal gas by default; the Peng-Robinson equation can be selected for the vapor fugacity in the package settings (its kij are saved as InteractionParameters_PR). By default the enthalpy follows the liquid heat capacity of the compounds from 25 °C, with the vapor reached through the enthalpy of vaporization; the ideal-gas, Lee-Kesler and excess-enthalpy options are in the package settings. Liquid densities come from experimental data, Rackett or COSTALD.

Derivatives. The package provides analytical temperature and composition derivatives of ln γi, used by the vapor-fraction flashes and the rigorous column solvers.

Limitations

  • Low to moderate pressure: the liquid has no pressure dependence beyond the Poynting factor. Select the Peng-Robinson vapor when the pressure is well above atmospheric.
  • The parameters hold within the temperature range of the data they were fitted to. Parameters regressed from vapor-liquid data may predict a liquid-liquid split poorly, or miss it.
  • Estimated (UNIFAC) parameters are a fallback; for design work fit the pair to measured data with the Data Regression utility.
  • Supercritical gases (H2, N2, CH4, CO2) dissolve through Henry constants; at high pressure, or for gas-rich mixtures, use an equation of state such as Peng-Robinson.

Example

This code runs on every build of this site, and the output below is what it printed.

fs = (Flowsheet.Create("NRTLExample")
      .WithCompounds("Ethanol", "Water")
      .WithPropertyPackage(PropertyPackages.NRTL))

def bubble_point(tag, x_ethanol):
    # pressure and vapor fraction given: the flash finds the temperature
    return (fs.AddMaterialStream(tag)
            .WithPressure(Q.Bar(1.01325)).WithVaporFraction(0.0)
            .SetCompoundMolarFlow("Ethanol", x_ethanol)
            .SetCompoundMolarFlow("Water", 1.0 - x_ethanol))

dilute = bubble_point("10 % ethanol", 0.10)
azeo = bubble_point("Azeotrope", 0.894)      # measured azeotrope at 1 atm: x = 0.894, 78.15 C

fs.Solve()

pp = list(fs.Inner.PropertyPackages.Values)[0].__implementation__
ip = pp.m_uni.InteractionParameters["Ethanol"]["Water"]
print(f"Binary parameters    = A12 {ip.A12:.2f}, A21 {ip.A21:.2f} cal/mol, alpha {ip.alpha12:.4f}")
for s in (dilute.Object, azeo.Object):
    x = s.Phases[3].Compounds["Ethanol"].MoleFraction
    y = s.Phases[2].Compounds["Ethanol"].MoleFraction
    print(f"x = {x:.3f}: bubble T = {s.GetTemperature() - 273.15:.2f} C, ethanol in vapor y = {y:.4f}")

Output

Binary parameters    = A12 -57.96, A21 1241.74 cal/mol, alpha 0.2937
x = 0.100: bubble T = 86.68 C, ethanol in vapor y = 0.4374
x = 0.894: bubble T = 78.39 C, ethanol in vapor y = 0.8908

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 / PR EOS
Liquid fugacity Activity Coefficient + Poynting + Vapor Pressure / Henry's Constant
Vapor enthalpy, entropy, Cp/Cv Ideal / Lee-Kesler / Excess / Experimental
Liquid enthalpy, entropy, Cp/Cv Ideal / Lee-Kesler / Excess / Experimental
Vapor density Ideal / PR EOS
Liquid density Experimental / Rackett / COSTALD
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.

Element Content in the example What it holds
InteractionParameters_PR empty kij of the Peng-Robinson equation used for the vapor phase when it is not ideal (Value), pairs of the flowsheet compounds
InteractionParameters_NRTL 1 InteractionParameter entry (Compound1, Compound2, ID1, ID2, A12, A21, B12, B21, C12, C21, alpha12) NRTL parameters of the pairs of the flowsheet compounds; τij = (Aij + BijT + CijT2)/(RT) with A in cal/mol, and the non-randomness alpha12
First InteractionParameter of InteractionParameters_NRTL in the example
<InteractionParameter Compound1="Ethanol" Compound2="Water" ID1="1102" ID2="1921" A12="-57.9601" A21="1241.7396" B12="0" B21="0" C12="0" C21="0" alpha12="0.2937" />
Settings common to every property package, as saved for the example
Element Value
Type DWSIM.Thermodynamics.PropertyPackages.NRTLPropertyPackage
ComponentName NRTL
ComponentDescription
Tag NRTL
UseHenryConstants true
AutoEstimateMissingNRTLUNIQUACParameters true
UseImmiscibleListForLiquid2InitialEstimates true
SingleCompoundCheckThreshold 0.99999
OverrideKvalFugCoeff false
OverrideEnthalpyCalculation false
OverrideEntropyCalculation false
LiquidDensityCalculationMode_Subcritical COSTALD
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

NRTLPropertyPackage()
public NRTLPropertyPackage()
Public Sub New()

NRTLPropertyPackage(bool)
Parameter Type Description
comode Boolean
public NRTLPropertyPackage(bool comode)
Public Sub New(comode As Boolean)

Properties

DisplayDescription
public override string DisplayDescription { get; }
Public Overrides ReadOnly Property DisplayDescription As String

DisplayName
public override string DisplayName { get; }
Public Overrides ReadOnly Property DisplayName As String

m_uni
public NRTL m_uni { get; set; }
Public Property m_uni As NRTL

Popular
public override bool Popular { get; }
Public Overrides ReadOnly Property Popular As Boolean

Methods

CheckMissingInteractionParameters(double[])
Parameter Type Description
Vx Double[]
public override bool CheckMissingInteractionParameters(double[] Vx)
Public Overrides Function CheckMissingInteractionParameters(Vx As Double()) As Boolean

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

EstimateMissingInteractionParameters(bool)
Parameter Type Description
verbose Boolean
public void EstimateMissingInteractionParameters(bool verbose)
Public Sub EstimateMissingInteractionParameters(verbose As Boolean)

GetEditingForm(): Returns the binary interaction parameter editor of this package.

Returns the binary interaction parameter editor of this package.

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

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

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

Fields

ClassId
public const string ClassId = "D42F0157-5750-4c89-A94E-634A04701568"
Public Const ClassId As String = "D42F0157-5750-4c89-A94E-634A04701568"