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
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¶
-
User guide
-
Used with
-
Tutorials
-
FluentAPI
API members¶
Public members declared by this class. Inherited members are documented on the base classes.
Constructors¶
NRTLPropertyPackage(bool)
| Parameter | Type | Description |
|---|---|---|
comode |
Boolean |
Properties¶
DisplayDescription
DisplayName
Methods¶
CheckMissingInteractionParameters(double[])
| Parameter | Type | Description |
|---|---|---|
Vx |
Double[] |
DisplayEditingForm()
EstimateMissingInteractionParameters(bool)
| Parameter | Type | Description |
|---|---|---|
verbose |
Boolean |
GetEditingForm(): Returns the binary interaction parameter editor of this package.
Returns the binary interaction parameter editor of this package.
RunPostMaterialStreamSetRoutine()
Fields¶