Skip to content

UNIQUAC

UNIQUAC (Universal Quasi-Chemical) activity coefficient model for the liquid phase, with the r and q structural parameters of the compounds and binary parameters from the ChemSep databank, an ideal or Peng-Robinson vapor phase and vapor pressures from the compound correlations. For polar and hydrogen-bonding liquid mixtures, including partially miscible ones.

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

Scope

An activity coefficient model for the liquid phase of polar, hydrogen-bonding and partially miscible mixtures at low to moderate pressure: water with alcohols, ketones or esters, heterogeneous azeotropes and decanters, extraction, and mixtures of molecules of very different size. 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.

UNIQUAC (Universal Quasi-Chemical) splits the excess Gibbs energy into two parts. The combinatorial part accounts for differences in size and shape through two pure-compound parameters, the relative volume ri and the relative surface area qi (coordination number z = 10). The residual part accounts for the interaction energies through two binary parameters per pair:

ln γi = ln γiC + ln γiR, τij = exp[(-Aij + BijT + CijT2)/(RT)]

with A in cal/mol, which is the classic τij = exp[-(uij - ujj)/RT] when B and C are zero. Only the residual part depends on temperature. UNIQUAC is also the basis of the UNIFAC group contribution method, which computes r, q and the interactions from functional groups.

Parameters. r and q of the compounds and the binary A12, A21, B and C come from the UNIQUAC tables of the ChemSep databank shipped with DWSIM. When a pair is missing and AutoEstimateMissingNRTLUNIQUACParameters is on (the default), the package estimates it from UNIFAC; a pair in which one compound boils below 200 K gets near-ideal values. The parameters can be edited in the package editor, fitted to VLE or LLE data with the Data Regression utility, or set from code with ConfigureUNIQUAC(c => c.WithBinary(c1, c2, a12, a21)), and are saved with the flowsheet.

Vapor phase and caloric properties. As in NRTL: ideal vapor by default with the Peng-Robinson vapor as an option (its kij saved as InteractionParameters_PR), enthalpy from the liquid heat capacity and the enthalpy of vaporization of the compounds by default, liquid densities from experimental data, Rackett or COSTALD. Analytical temperature and composition derivatives of ln γi are available to the flashes and the column solvers.

Limitations

  • Low to moderate pressure; for high pressure or gas-rich mixtures use an equation of state.
  • Parameters fitted to vapor-liquid data reproduce bubble points and vapor compositions, and may misplace the mutual solubilities of a liquid-liquid split. In the example (water and 1-butanol) the bubble temperature and the vapor match the measured heterogeneous azeotrope, while the butanol-rich liquid holds less water than measured. Fit the pair to LLE data when the liquid compositions matter.
  • Supercritical gases dissolve through Henry constants.

Example

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

fs = (Flowsheet.Create("UNIQUACExample")
      .WithCompounds("Water", "1-butanol")
      .WithPropertyPackage(PropertyPackages.UNIQUAC))

# 60 mol% water lies inside the miscibility gap: at its bubble point two liquids
# boil together with one vapor (vapor-liquid-liquid equilibrium)
feed = (fs.AddMaterialStream("Water + butanol")
        .WithPressure(Q.Bar(1.01325)).WithVaporFraction(0.0)
        .SetCompoundMolarFlow("Water", 0.6)
        .SetCompoundMolarFlow("1-butanol", 0.4))

fs.Solve()

s = feed.Object
vapor = s.Phases[2]
# the two liquid phases: the one with less water is the butanol-rich phase
liquids = sorted((s.Phases[3], s.Phases[4]), key=lambda p: p.Compounds["Water"].MoleFraction)
organic, aqueous = liquids
print(f"Bubble temperature   = {s.GetTemperature() - 273.15:.2f} C")
print(f"Water in vapor       = {vapor.Compounds['Water'].MoleFraction:.4f} (mole fraction), "
      f"{vapor.Compounds['Water'].MassFraction * 100:.1f} wt%")
print(f"Water in organic     = {organic.Compounds['Water'].MassFraction * 100:.1f} wt%")
print(f"Butanol in aqueous   = {aqueous.Compounds['1-butanol'].MassFraction * 100:.1f} wt%")
print(f"Aqueous phase        = {aqueous.Properties.molarfraction:.4f} of the liquid (mole fraction)")

Output

Bubble temperature   = 92.89 C
Water in vapor       = 0.7604 (mole fraction), 43.6 wt%
Water in organic     = 17.4 wt%
Butanol in aqueous   = 7.7 wt%
Aqueous phase        = 0.2636 of the liquid (mole fraction)

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_UNIQUAC 2 InteractionParameter entries (Compound1, Compound2, ID1, ID2, A12, A21, B12, B21, C12, C21) UNIQUAC parameters of the pairs of the flowsheet compounds; τij = exp[(-Aij + BijT + CijT2)/(RT)] with A in cal/mol
First InteractionParameter of InteractionParameters_UNIQUAC in the example
<InteractionParameter Compound1="Water" Compound2="1-butanol" ID1="1921" ID2="1105" A12="548.2453" A21="89.0444" B12="0" B21="0" C12="0" C21="0" />
Settings common to every property package, as saved for the example
Element Value
Type DWSIM.Thermodynamics.PropertyPackages.UNIQUACPropertyPackage
ComponentName UNIQUAC
ComponentDescription
Tag UNIQUAC
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

UNIQUACPropertyPackage()
public UNIQUACPropertyPackage()
Public Sub New()

UNIQUACPropertyPackage(bool)
Parameter Type Description
comode Boolean
public UNIQUACPropertyPackage(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 UNIQUAC m_uni { get; set; }
Public Property m_uni As UNIQUAC

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

RET_VQ()
public object RET_VQ()
Public Function RET_VQ() As Object

RET_VR()
public object RET_VR()
Public Function RET_VR() As Object

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

Fields

ClassId
public const string ClassId = "5265F953-8825-4a80-9112-A3B68C329E4C"
Public Const ClassId As String = "5265F953-8825-4a80-9112-A3B68C329E4C"