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
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(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¶