This guide provides detailed documentation of the COMP database, which stores pure component parameters used by NeqSim’s thermodynamic models. Understanding these parameters is essential for model selection, debugging, and extending NeqSim with new components.
Table of Contents
- Database Overview
- Database Location and Format
- Parameter Categories
- Parameter Reference Table
- Link to Thermodynamic Models
- Component Types
- Accessing Parameters in Code
- Adding Custom Components
- Related Database Tables
Database Overview
The COMP table is the primary pure component property database in NeqSim. It contains over 150 parameters per component, organized into functional groups that support different thermodynamic models and property calculations.
Key characteristics:
- ~260 components in the standard database
- CSV format for easy maintenance and version control
- Loaded at runtime into an in-memory H2 database
- Extensible via temporary tables or database modification
Database Location and Format
| Item | Value |
|---|---|
| File Path | src/main/resources/data/COMP.csv |
| Runtime Path | data/COMP.csv (in JAR) |
| Format | CSV with header row |
| Encoding | UTF-8 |
| Primary Key | ID (integer) |
| Lookup Key | NAME (string, case-sensitive) |
Parameter Categories
Basic Properties
| Column | Description | Unit | Model Usage |
|---|---|---|---|
ID |
Unique component identifier | - | Internal indexing |
NAME |
Component name for lookup | - | addComponent("methane", ...) |
CASnumber |
CAS Registry Number | - | Component identification |
InChIKey |
Structure-derived identifier | - | Identity checking, not used by any model |
COMPTYPE |
Component type classification | - | Model selection (see Component Types) |
COMPINDEX |
Component index in database | - | Internal ordering |
FORMULA |
Chemical formula | - | Element calculations |
MOLARMASS |
Molar mass | g/mol | All models (stored internally as kg/mol) |
InChIKey is a hash of the molecular structure, so it is identical for a
substance no matter how it is named and differs whenever the structure differs.
Use it, not the name or the CAS number, to check whether two rows are the same
molecule: a CAS number may be missing, wrong, or registered separately for each
stereoisomer, and a row created by copying another keeps the original’s values in
every column that was not edited. A repeated InChIKey is either an intentional
variant pair (a neutral and its ion, a PVTsim re-parameterisation, ice and
water) or a copy-paste defect.
Temporary TBP and wax pseudo-components have no defined molecular structure, so
their InChIKey is left unset. Their database insert names its physical-property
columns explicitly: optional identity columns must not shift or discard wax
flags, fusion enthalpies, or other characterization data. This also preserves
compatibility with component tables that have no InChIKey column.
When adding standard components, also update the case-insensitive canonical-name
index in ComponentNameResolver. Loading the extended database also imports any
standard component names and optional columns absent from COMP_EXT.csv.
Existing extended component properties are retained, and imported rows receive
new unique IDs; the original extended resource remains unchanged.
Read CSV names with a CSV parser because systematic names can contain commas.
Critical Properties
These parameters are fundamental to all cubic equations of state (SRK, PR, etc.).
| Column | Description | Unit | Model Usage |
|---|---|---|---|
TC |
Critical temperature | °C | Converted to K internally: $T_c = T_{C,db} + 273.15$ |
PC |
Critical pressure | bara | SRK, PR, CPA EoS parameter a and b |
ACSFACT |
Acentric factor (ω) | - | Alpha function: $m = f(\omega)$ |
CRITVOL |
Critical molar volume | cm³/mol | Critical compressibility: $Z_c = \frac{P_c V_c}{R T_c}$ |
NORMBOIL |
Normal boiling point | °C | Stored as K internally |
Model linkage:
- SRK EoS: $a = 0.42748 \frac{R^2 T_c^2}{P_c}$, $b = 0.08664 \frac{R T_c}{P_c}$
- PR EoS: $a = 0.45724 \frac{R^2 T_c^2}{P_c}$, $b = 0.07780 \frac{R T_c}{P_c}$
- Alpha function: $\alpha(T) = [1 + m(1-\sqrt{T_r})]^2$ where $m = f(\omega)$
Vapor Pressure Parameters
Parameters for Antoine-type vapor pressure correlations.
| Column | Description | Unit | Model Usage |
|---|---|---|---|
AntoineVapPresLiqType |
Equation type or availability marker | - | pow10, pow10KPa, log, exp, loglog; none means unavailable |
ANTOINEA |
Antoine A coefficient | - | Vapor pressure calculation |
ANTOINEB |
Antoine B coefficient | - | Vapor pressure calculation |
ANTOINEC |
Antoine C coefficient | - | Vapor pressure calculation |
ANTOINED |
Antoine D coefficient | - | Extended Antoine |
ANTOINEE |
Antoine E coefficient | - | Extended Antoine |
ANTOINESolidA |
Solid vapor pressure A | - | Sublimation pressure |
ANTOINESolidB |
Solid vapor pressure B | - | Sublimation pressure |
ANTOINESolidC |
Solid vapor pressure C | - | Sublimation pressure |
Antoine equation forms:
pow10: $\log_{10}(P_{sat}) = A - \frac{B}{T + C - 273.15}$ (P in bar absolute, API temperature T in K)pow10KPa: $P_{sat} = 10^{A-B/(T+C)}/10^5$ in bar absolute, with T in K. The legacy label retains this existing scale; it does not select a kPa-to-bar conversion.-
For non- pow10/pow10KPalabels with $E > 10^{-12}$, DIPPR-101 gives $P_{sat} = \exp(A + B/T + C \ln(T) + DT^E)/10^5$ in bar, with T in K. This includes legacy logandexplabels. - With zero exponent,
logandexpuse $P_{sat} = \exp(A - B/(T+C))$ in bar, with T in K.
getAntoineVaporPressuredT(T) returns the analytical derivative for pow10,
pow10KPa, DIPPR-101, and the three-parameter log/exp form, in bar/K.
For pow10KPa, $dP_{sat}/dT = P_{sat}\ln(10)B/(T+C)^2$; explicit base-ten
labels keep precedence even when ANTOINEE is nonzero. The pressure and
derivative therefore use the same correlation and scale during inverse-temperature
recovery. The legacy Wagner fallback still returns zero for the derivative;
correlation availability alone does not establish derivative support for that path.
Missing data and applicability: none with zero ANTOINEA–ANTOINEE
means no liquid-vapor correlation is available; it does not mean zero vapor
pressure. The three repeated legacy tuples reported in issue #3771, copied
water coefficients on unrelated compounds, the default pseudo-component
template, and every charged species are marked this way. Repeated coefficients
have not been reinterpreted as measured Wagner fits or replaced with guessed data.
Water and seawater retain their existing correlation. Solid sublimation
coefficients and EOS parameters are separate and are unchanged.
ComponentInterface.hasAntoineVaporPressureCorrelation() distinguishes missing
data from an available correlation. Availability alone does not certify the
accuracy or fitted range of older data. getAntoineVaporPressure(T) and its
temperature derivative return Double.NaN for missing data, ions, nonpositive or
nonfinite T, and T above the component’s critical temperature. The inverse
getAntoineVaporTemperature(P) returns NaN for missing data, nonpositive or
nonfinite P, and P above the critical pressure. A fitted correlation may have a
narrower range; subcritical results are not clipped to Pc and are not a general
quality guarantee. Below the melting point a liquid correlation can describe a
metastable liquid, not solid sublimation.
EOS saturation calculations and adsorption estimates already recognize NaN and
use their own initial guesses or estimation paths. Activity models requiring a
pure-liquid reference need actual vapor-pressure data or an appropriate Henry
reference; the none marker does not supply either. Selecting the extended
database applies the standard table’s unavailable-data markers and corrected
acetone coefficients to matching names, preserving other extended properties.
Acetone provenance: the NIST Chemistry WebBook
reports A = 4.42448, B = 1312.253, C = -32.445 for T in K and P in bar,
valid from 259.16 to 507.60 K, based on Ambrose, Sprake and Townsend (1974),
DOI: 10.1016/0021-9614(74)90119-0.
The database stores C = 240.705 to match the existing pow10 Celsius offset.
This gives approximately 0.306 bar at 298.15 K and 0.726 bar at 320 K; the
0.031 bar at 298.15 K quoted in issue #3771 is not the acetone reference value.
The three numerical coefficients are attributed reference data; no external
software or compiled database has been imported.
Ideal Gas Heat Capacity
Polynomial coefficients for ideal gas heat capacity: $C_p^{ig} = A + BT + CT^2 + DT^3 + ET^4$
| Column | Description | Unit |
|---|---|---|
CPA |
Coefficient A | J/(mol·K) |
CPB |
Coefficient B | J/(mol·K²) |
CPC |
Coefficient C | J/(mol·K³) |
CPD |
Coefficient D | J/(mol·K⁴) |
CPE |
Coefficient E | J/(mol·K⁵) |
CPsolid1-5 |
Solid phase Cp coefficients | J/(mol·K) |
CPliquid1-5 |
Liquid phase Cp coefficients | J/(mol·K) |
Usage: Enthalpy, entropy, and Gibbs energy departure functions for all EoS models.
Liquid Phase Properties
| Column | Description | Unit | Model Usage |
|---|---|---|---|
LIQDENS |
Liquid density at standard conditions | g/cm³ | Density correlations |
RACKETZ |
Rackett compressibility factor | - | Rackett liquid density: $V = V_c Z_{RA}^{[1+(1-T_r)^{2/7}]}$ |
racketZCPA |
Rackett Z for CPA model | - | CPA volume correction |
volcorrSRK_T |
SRK volume translation | - | Péneloux correction: $V_{corr} = V_{EoS} - c$ |
volcorrCPA_T |
CPA volume translation | - | CPA Péneloux correction |
STDDENS |
Standard density | g/cm³ | Reference conditions |
LIQUIDDENSITYCOEFS1-5 |
Liquid density correlation coefficients | - | Temperature-dependent density |
Transport Properties
| Column | Description | Unit | Model Usage |
|---|---|---|---|
DIPOLEMOMENT |
Dipole moment | Debye | Polar corrections |
VISCFACT |
Viscosity correction factor | - | Corresponding states |
LIQVISCMODEL |
Liquid viscosity model type | - | Model selection (1-4) |
LIQVISC1-4 |
Liquid viscosity parameters | - | Andrade equation: $\ln(\eta) = A + B/T + C\ln(T) + DT$ |
LIQUIDCONDUCTIVITY1-3 |
Liquid thermal conductivity | - | $k = A + BT + CT^2$ |
PARACHOR |
Parachor | - | Surface tension: $\sigma^{1/4} = P[\rho_L - \rho_V]$ |
PARACHOR_CPA |
Parachor for CPA model | - | CPA surface tension |
criticalViscosity |
Critical viscosity | Pa·s | Transport correlations |
Equation of State Parameters
Attractive Term Parameters
| Column | Description | Unit | Model Usage |
|---|---|---|---|
PVMODEL |
PV model type | - | Classic for standard EoS |
MC1, MC2, MC3 |
Mathias-Copeman parameters (SRK) | - | Enhanced alpha function |
MCPR1, MCPR2, MCPR3 |
Mathias-Copeman parameters (PR) | - | PR alpha function |
TwuCoon1-3 |
Twu-Coon alpha function parameters | - | Twu-Coon attractive term |
SCHWARTZENTRUBER1-3 |
Schwartzentruber parameters | - | Schwartzentruber EoS |
MC1Solid-MC3Solid |
Solid phase Mathias-Copeman | - | Solid fugacity |
Mathias-Copeman alpha function: \(\alpha = [1 + c_1(1-\sqrt{T_r}) + c_2(1-\sqrt{T_r})^2 + c_3(1-\sqrt{T_r})^3]^2\)
Lennard-Jones Parameters
| Column | Description | Unit | Model Usage |
|---|---|---|---|
LJDIAMETER |
LJ molecular diameter | Å | Gas viscosity, diffusion |
LJEPS |
LJ energy parameter | K | ε/k_B |
SphericalCoreRadius |
Hard-core radius | - | LJ potential |
LJDIAMETERHYDRATE |
LJ diameter for hydrates | Å | Hydrate equilibrium |
LJEPSHYDRATE |
LJ energy for hydrates | K | Hydrate cage interaction |
Association Parameters (CPA/SAFT)
Parameters for Cubic-Plus-Association (CPA) and PC-SAFT models.
| Column | Description | Unit | Model Usage |
|---|---|---|---|
associationsites |
Number of association sites | - | 0, 1, 2, 3, or 4 |
associationscheme |
Association scheme | - | 0, 1A, 2A, 2B, 3B, 4C |
associationenergy |
Association energy (ε^AB) | J/mol | CPA association term |
associationboundingvolume_SRK |
Association volume (β) for SRK-CPA | - | SRK-CPA |
associationboundingvolume_PR |
Association volume (β) for PR-CPA | - | PR-CPA |
aCPA_SRK |
CPA a parameter (SRK base) | Pa·m⁶/mol² | SRK-CPA |
bCPA_SRK |
CPA b parameter (SRK base) | m³/mol | SRK-CPA |
mCPA_SRK |
CPA m parameter (SRK base) | - | SRK-CPA |
aCPA_PR |
CPA a parameter (PR base) | Pa·m⁶/mol² | PR-CPA |
bCPA_PR |
CPA b parameter (PR base) | m³/mol | PR-CPA |
mCPA_PR |
CPA m parameter (PR base) | - | PR-CPA |
PC-SAFT Parameters
| Column | Description | Unit | Model Usage |
|---|---|---|---|
mSAFT |
Number of segments | - | Chain length |
sigmaSAFT |
Segment diameter | Å | Hard-sphere term |
epsikSAFT |
Segment energy | K | ε/k_B |
associationboundingvolume_PCSAFT |
Association volume | - | PC-SAFT association |
associationenergy_PCSAFT |
Association energy | K | PC-SAFT association |
Association schemes:
| Scheme | Sites | Example Molecules |
|——–|——-|——————-|
| 0 | 0 | Non-associating (hydrocarbons) |
| 1A | 1 | HCl, aromatic compounds |
| 2A | 2 | CO₂ (electron donor/acceptor) |
| 2B | 2 | Alcohols (1 proton donor, 1 acceptor) |
| 3B | 3 | Amines |
| 4C | 4 | Water, glycols (2 donors, 2 acceptors) |
Hydrate Parameters
Parameters for gas hydrate equilibrium calculations.
| Column | Description | Unit | Model Usage |
|---|---|---|---|
HydrateFormer |
Hydrate-forming capability | - | yes or no |
HydrateA1Small, HydrateB1Small |
Type I small cage (512) | - | Langmuir constants |
HydrateA1Large, HydrateB1Large |
Type I large cage (51262) | - | Langmuir constants |
HydrateA2Small, HydrateB2Small |
Type II small cage (512) | - | Langmuir constants |
HydrateA2Large, HydrateB2Large |
Type II large cage (51264) | - | Langmuir constants |
A1_smallGF-B2_largeGF |
Graffis parameters | - | Alternative parameterization |
SphericalCoreRadiusHYDRATE |
Core radius for hydrates | - | Cavity occupation |
Thermodynamic Reference Data
| Column | Description | Unit | Model Usage |
|---|---|---|---|
Href |
Reference enthalpy | J/mol | Enthalpy calculations |
GIBBSENERGYOFFORMATION |
Gibbs energy of formation | J/mol | Chemical equilibrium |
ENTHALPYOFFORMATION |
Standard enthalpy of formation | J/mol | Reaction thermodynamics |
ABSOLUTEENTROPY |
Absolute entropy | J/(mol·K) | Entropy calculations |
HEATOFFUSION |
Heat of fusion | J/mol | Solid-liquid equilibrium |
Hsub |
Heat of sublimation | J/mol | Solid-vapor equilibrium |
TRIPLEPOINTTEMPERATURE |
Triple point temperature | K | Phase boundaries |
TRIPLEPOINTPRESSURE |
Triple point pressure | bar | Phase boundaries |
TRIPLEPOINTDENSITY |
Triple point density | kg/m³ | Reference state |
MELTINGPOINTTEMPERATURE |
Melting point | K | Solid calculations |
Ionic and Electrolyte Parameters
| Column | Description | Unit | Model Usage |
|---|---|---|---|
IONICCHARGE |
Ionic charge | - | Electrolyte models |
REFERENCESTATETYPE |
Reference state | - | solvent or solute |
DIELECTRICPARAMETER1-5 |
Dielectric parameters | - | Electrolyte activity |
DeshMatIonicDiameter |
Debye-Hückel diameter | Å | Electrolyte models |
calcActivity |
Activity calculation flag | - | 0 or 1 |
Henry’s Law Parameters
| Column | Description | Unit |
|---|---|---|
HenryCoef1 |
Henry constant A | - |
HenryCoef2 |
Henry constant B | - |
HenryCoef3 |
Henry constant C | - |
HenryCoef4 |
Henry constant D | - |
Henry’s law correlation: \(\ln(H) = A + \frac{B}{T} + C\ln(T) + DT\)
Solid Phase Parameters
| Column | Description | Unit |
|---|---|---|
SOLIDDENSITYCOEFS1-5 |
Solid density coefficients | - |
HEATOFVAPORIZATIONCOEFS1-5 |
Heat of vaporization coefficients | - |
waxformer |
Wax-forming component | - |
Parameter Reference Table
Complete parameter list with units and typical values:
| Parameter | Unit | Example (methane) | Example (water) |
|---|---|---|---|
MOLARMASS |
g/mol | 16.043 | 18.015 |
TC |
°C | -82.59 | 374.15 |
PC |
bara | 45.99 | 220.89 |
ACSFACT |
- | 0.0115 | 0.344 |
CRITVOL |
cm³/mol | 99.0 | 56.0 |
NORMBOIL |
°C | -161.55 | 100.0 |
LIQDENS |
g/cm³ | 0.422 | 0.999 |
RACKETZ |
- | 0.0 | 0.0 |
DIPOLEMOMENT |
Debye | 0.0 | 1.8 |
associationsites |
- | 0 | 4 |
HydrateFormer |
- | yes | no |
Link to Thermodynamic Models
How Parameters Feed into Models
┌─────────────────────────────────────────────────────────────────┐
│ COMP Database │
├─────────────────────────────────────────────────────────────────┤
│ TC, PC, ACSFACT ──────────────> Cubic EoS (SRK, PR) │
│ MC1, MC2, MC3 ──────────────> Mathias-Copeman α(T) │
│ TwuCoon1-3 ──────────────> Twu-Coon α(T) │
│ aCPA, bCPA, mCPA ──────────────> CPA EoS │
│ associationsites ──────────────> CPA/SAFT Association │
│ mSAFT, σSAFT, εSAFT ──────────> PC-SAFT │
│ UNIFAC groups ──────────────> Activity models │
│ LJDIAMETER, LJEPS ─────────────> Transport properties │
│ HydrateA/B params ─────────────> Hydrate equilibrium │
│ CPA, CPB, CPC... ──────────────> Enthalpy/Entropy │
│ ANTOINEA-E ──────────────> Vapor pressure │
└─────────────────────────────────────────────────────────────────┘
Model-Parameter Mapping
| Model Class | Key Parameters |
|---|---|
SystemSrkEos |
TC, PC, ACSFACT, MC1-3, RACKETZ |
SystemPrEos |
TC, PC, ACSFACT, MCPR1-3 |
SystemSrkCPA |
aCPA_SRK, bCPA_SRK, mCPA_SRK, associationsites, associationenergy, associationboundingvolume_SRK |
SystemPrCPA |
aCPA_PR, bCPA_PR, mCPA_PR, associationboundingvolume_PR |
SystemPCSAFT |
mSAFT, sigmaSAFT, epsikSAFT, associationboundingvolume_PCSAFT |
SystemGERG2008Eos |
Uses internal GERG parameters, but TC/PC for initialization |
SystemUNIFAC |
TC, PC (for vapor), UNIFAC groups from UNIFACcomp table |
Component Types
The COMPTYPE field classifies components for model selection:
| Type | Description | Examples |
|---|---|---|
HC |
Hydrocarbon | methane, ethane, propane, benzene |
inert |
Inert gas | nitrogen, CO2, oxygen, argon |
ion |
Ionic species | Na+, Cl-, HCO3-, Ca++ |
amine |
Amine compounds | MDEA, MEA, DEA |
alcohol |
Alcohols | methanol, ethanol |
glycol |
Glycol compounds | MEG, DEG, TEG |
ice |
Ice/solid water | ice |
TBP |
TBP pseudo-component | Generated from characterization |
plus |
Plus fraction | C7+, C10+, etc. |
Accessing Parameters in Code
Reading Component Properties
// Create a system and access component properties
SystemInterface fluid = new SystemSrkEos(298.15, 10.0);
fluid.addComponent("methane", 1.0);
fluid.init(0);
// Access pure component parameters
ComponentInterface comp = fluid.getPhase(0).getComponent("methane");
double Tc = comp.getTC(); // Critical temperature [K]
double Pc = comp.getPC(); // Critical pressure [bara]
double omega = comp.getAcentricFactor(); // Acentric factor [-]
double Mw = comp.getMolarMass(); // Molar mass [kg/mol]
double Tb = comp.getNormalBoilingPoint(); // Normal boiling point [K]
System.out.println("Methane Tc = " + Tc + " K");
System.out.println("Methane Pc = " + Pc + " bara");
System.out.println("Methane ω = " + omega);
Modifying Component Properties
// Modify properties for sensitivity analysis
comp.setTC(190.6); // Set new Tc in Kelvin
comp.setPC(46.0); // Set new Pc in bara
comp.setAcentricFactor(0.012);
// Re-initialize to apply changes
fluid.init(0);
Adding Custom Components
Method 1: Database Modification
Add a new row to COMP.csv with all required parameters.
Method 2: Runtime Addition
// Add a pseudo-component with custom properties
SystemInterface fluid = new SystemSrkEos(298.15, 50.0);
// Add TBP fraction with molar mass and density
fluid.addTBPfraction("C7_custom", 0.1, 95.0 / 1000.0, 0.72); // name, moles, MW [g/mol], SG
// Or add component and modify properties
fluid.addComponent("n-heptane", 1.0);
ComponentInterface comp = fluid.getPhase(0).getComponent("n-heptane");
comp.setTC(540.0);
comp.setPC(27.4);
comp.setAcentricFactor(0.35);
// Initialize database for binary parameters
fluid.createDatabase(true);
fluid.setMixingRule(2);
Method 3: Temporary Tables
// Enable temporary tables for session-specific components
NeqSimDataBase.setCreateTemporaryTables(true);
// Components added to "comptemp" table
fluid.getPhase(0).getComponent(0).insertComponentIntoDatabase("comptemp");
// Remember to disable after use
NeqSimDataBase.setCreateTemporaryTables(false);
Related Database Tables
The COMP table works with several related tables:
| Table | Purpose | Key Columns |
|---|---|---|
INTER |
Binary interaction parameters (kij) | comp1, comp2, kij, model |
UNIFACcomp |
UNIFAC group assignments (original UNIFAC) | Name, sub1…sub138 |
UNIFACcompUMRPRU |
UNIFAC group assignments (UMR-PRU) | Name, sub1…sub138 |
UNIFACGroupParam |
UNIFAC subgroup parameters | Secondary, Main, VolumeR, SurfAreaQ |
UNIFACInterParam* |
UNIFAC group interaction parameters | MainGroup, n1…n70 |
MBWR32param |
MBWR equation parameters | comp, coefficients |
AdsorptionParameters |
Adsorption isotherm parameters | comp, adsorbent, params |
The subN columns are indexed by the standard UNIFAC secondary subgroup
number, so sub12 is ACCH2. A component row is found by exact match on
Name against the COMP.csv NAME, which means a name mismatch between the two
files silently leaves the component with no groups.
UNIFAC Group Assignment Conventions
There are two group-assignment tables, and they are not interchangeable:
| Table | Read by | Maintained? |
|---|---|---|
UNIFACcomp.csv |
classic UNIFAC / UNIQUAC (ComponentGEUnifac) |
No — frozen |
UNIFACcompUMRPRU.csv |
UMR-PRU (ComponentGEUnifacUMRPRU) |
Yes |
UMR-PRU is the model in active use, so UNIFACcompUMRPRU.csv is the table that
is kept complete and correct. Where the two disagree, the UMR-PRU assignment
follows NTUA/Voutsas, which takes precedence over the DDBST original-UNIFAC
decomposition. UNIFACcomp.csv is left as published.
The subgroup number used in both tables is the Secondary column of
UNIFACGroupParam.csv, not ID. UNIFACGroupParam.csv also carries a
Reference column identifying where each subgroup comes from:
| Reference | Subgroups | Source |
|---|---|---|
Hansen1991 |
1–64, 70 | Published original UNIFAC (DDBST) |
Holderbaum1991, Fisher1995 |
120–128, 134 | PSRK gas groups |
Voutsas2017, Voutsas, NTUA, Mentzelos |
135–140 | UMR-PRU extensions |
Aromatics
Main group 4 is “aromatic carbon-alkane”. When a ring carbon carries an alkane substituent, the ring carbon and its attached carbon form a single ACCH3 / ACCH2 / ACCH group:
toluene 5*ACH + 1*ACCH3
ethylbenzene 5*ACH + 1*ACCH2 + 1*CH3
pentylbenzene 5*ACH + 1*ACCH2 + 3*CH2 + 1*CH3
The bare AC group is reserved for a ring carbon whose substituent is not
an alkane group, for example styrene (1*CH2=CH + 5*ACH + 1*AC), a naphthalene
ring fusion, or one of the dedicated ACOH / ACCl / ACNO2 / ACNH2 groups.
Rings
The UMR-PRU set adds cyclic clones cCH2 (136), cCH (137) and cC (138).
They carry the same R and Q as CH2 / CH / C and sit in their own main groups
66–68 so that ring-specific interaction parameters can be regressed. Because R
and Q are identical, the combinatorial term is unaffected; only the residual
term changes. All cross terms between main group 1 and main groups 66–68 are
zero in the A, B and C matrices, and the rows are otherwise equal, so the two
choices differ only against water, CO2, CH4, N2, H2S, C2H6, Hg and TEG.
In UNIFACcompUMRPRU.csv every ring carbon uses the cyclic groups. This
matches the DDBST modified UNIFAC (Dortmund) assignment set, which uses its
cyclic subgroups 78/79/80 (CY-CH2, CY-CH, CY-C) for the same molecules:
cyclohexane 6*cCH2
methylcyclohexane 1*CH3 + 5*cCH2 + 1*cCH
n-butylcyclohexane 1*CH3 + 3*CH2 + 5*cCH2 + 1*cCH
cyclopropane 3*cCH2
Original UNIFAC has no cyclic groups at all — main groups 66–68 have no rows in
UNIFACInterParam.csv — so UNIFACcomp.csv correctly uses the aliphatic groups
for rings. The same molecule therefore has two different, both correct,
assignments in the two tables.
Small rings (C3, C4) are outside the range the Voutsas2017 parameters were
regressed on, since group contribution cannot represent ring strain. They are
assigned the cyclic groups anyway, because that is both the structurally correct
decomposition and what DDBST does.
Gases
Light gases are carried as a single dedicated group rather than decomposed:
CH4 (122), O2 (123), Ar (124), N2 (125), H2S (126), H2 (127), CO (128),
C2H6 (134). Spin isomers share the parent group, so ortho-hydrogen and
para-hydrogen both use H2 (127) — UNIFAC has no way to distinguish them.
Argon’s main group 59 has an interaction parameter only against water, so against hydrocarbons argon reduces to the combinatorial term alone.
Known gaps: ethylene and alkynes
ethylene has no representable assignment. Main group 2 (C=C) provides
only substituted subgroups — CH2=CH, CH=CH, CH2=C, CH=C, C=C — and none stands
for a bare CH2=CH2. DDBST has no assignment for it either, in any of its
original, modified or PSRK sets. Representing ethylene needs a dedicated fitted
group, the way Voutsas added C2H6 as group 134; it is not a data-entry fix and
must not be approximated with a substituted olefin group.
5-methyl-3-heptyne has the same problem for a different reason: DDBST assigns
the alkyne subgroup 66, which has no row in UNIFACGroupParam.csv and therefore
neither R and Q nor interaction parameters.
Both are listed in HYDROCARBONS_WITHOUT_A_GROUP in UnifacDatabaseIntegrityTest
so the “every hydrocarbon has an assignment” check does not demand a row that
cannot be written. They remain usable with the cubic equations of state.
Missing groups fail loudly
A component with no group assignment gives R = Q = 0, which makes the
combinatorial term evaluate to NaN rather than raising an error.
ComponentGEUnifac and ComponentGEUnifacUMRPRU therefore throw when a
component ends up with no groups.
Note that a UMR-PRU or PSRK component does not need a row in
UNIFACcomp.csv. PhaseGEUnifac skips building the classic components when it
is constructing a subclass, which would otherwise discard them immediately while
forcing every UMR-PRU component to be duplicated into the classic table.
Vapor-pressure data audit (issue #3822)
The public vapor-pressure API returns NaN when a correlation is unavailable,
inapplicable or produces a nonfinite/nonpositive pressure. Its inverse must close
the requested pressure before returning a temperature. It does not expose overflow
as a usable pressure or report a failed inverse iteration as success.
The H2O2 row combined an incompatible coefficient set with DIPPR dispatch and
produced infinity. Its liquid-vapor correlation is now explicitly unavailable.
Unverified copied tuples for PG, SF6, R12, R134a, COS, 3-methyl-1-butene and eight
branched/cyclic hydrocarbons are also unavailable, as are the all-zero sulfuric
acid, nitric acid and NO2 tuples. The standard COMP.csv records the corrections. The existing extended-database
loader applies the same reviewed standard correlations when COMP_EXT.csv is
selected, preserving unrelated extended data. This does not remove the components or their EOS parameters.
Species aliases and deliberate seawater/water or MEG variants are not automatically
rejected merely because their coefficients coincide.
Ammonia and H2S use sourced base-ten Antoine fits, with pressure in bar:
| Component | Source temperature range (K) | A | B | C for T in K |
|---|---|---|---|---|
| Ammonia | 239.6–371.5 | 4.86886 | 1113.928 | -10.409 |
| H2S | 212.8–349.5 | 4.52887 | 958.587 | -0.539 |
Sources: NIST Chemistry WebBook, Stull (1947),
ammonia and
hydrogen sulfide.
The database pow10 convention uses Celsius in the denominator, so its stored
C adds 273.15 to the tabulated Kelvin C. The table has no per-fit range columns;
callers must respect these fit ranges. The API’s generic positive-T/Tc check is
not a certification of validity throughout that larger interval.
AntoineHazopRegressionTest verifies these fits, their derivatives and inverses,
as well as rejection of the original H2O2 overflow from custom/legacy tables.
Ionic critical fields are pseudo-component model parameters, not measured
liquid-vapor critical points of isolated ions. CSV TC uses degrees Celsius,
whereas the Java getter uses kelvin. Replacing these model inputs with NaN
would invalidate electrolyte calculations; liquid-vapor applicability is instead
rejected explicitly for ions by the property API.
Data Integrity Gates
Two JUnit tests guard these tables. Both compare the current findings against a baseline of accepted, pre-existing issues, and both fail if a baseline entry has been fixed, so the baselines can only shrink.
| Test | Guards | Baseline |
|---|---|---|
ComponentDatabaseIntegrityTest |
COMP.csv | src/test/resources/data/comp_known_issues.tsv |
UnifacDatabaseIntegrityTest |
UNIFAC tables | src/test/resources/data/unifac_known_issues.tsv |
UnifacDatabaseIntegrityTest checks subgroup R, Q and main group against the
DDBST published values, duplicate component names, subgroups with no parameter
row, components with no groups, molar mass implied by the assigned groups
against COMP.csv, and the aromatic and ring conventions above.
The baseline is a ratchet, not a requirement to preserve defects. A fixed finding must be removed in the same change. Do not add newly introduced defects to make a test pass. The screening commands below can help inspect a proposed data change:
python devtools/screen_unifac_tables.py --tsv > src/test/resources/data/unifac_known_issues.tsv
python devtools/screen_component_database.py --tsv > src/test/resources/data/comp_known_issues.tsv
Write these files as UTF-8 without a byte order mark. On Windows use Python rather than PowerShell redirection, which adds a BOM.
The screening scripts and the tests do not report the same findings. The checks are implemented twice: in Python in
devtools/, and again in Java inside the tests.screen_unifac_tables.pyemits nomissing_unifac_rowfinding at all, so regeneratingunifac_known_issues.tsvfrom it deletes every such entry and the test then reports them all as new. Take the delta from the test failure output, which lists exactly what to add and remove, and edit the baseline rather than overwriting it.
CI does not run these tests for a data-only change. The
Detect Java/XML changesjob skips the whole test matrix when a pull request touches no.javaor.xmlfile, so a change toCOMP.csvor the UNIFAC tables alone goes green with these gates never executed. Run them locally:./mvnw test -Dtest=ComponentDatabaseIntegrityTest,UnifacDatabaseIntegrityTestNote the comma: surefire treats
+as a literal, and-Dtest=A+Bmatches nothing and fails with “No tests matching pattern”.
See Also
- Fluid Creation Guide - How to create fluids using these parameters
- Mixing Rules Guide - Binary interaction parameters (kij)
- Mathematical Models - Model equations using these parameters
References
- Soave, G. (1972). Equilibrium constants from a modified Redlich-Kwong equation of state. Chemical Engineering Science, 27(6), 1197-1203.
- Peng, D. Y., & Robinson, D. B. (1976). A new two-constant equation of state. Industrial & Engineering Chemistry Fundamentals, 15(1), 59-64.
- Kontogeorgis, G. M., et al. (1999). An equation of state for associating fluids. Industrial & Engineering Chemistry Research, 38(10), 4073-4082.
- Gross, J., & Sadowski, G. (2001). Perturbed-chain SAFT: An equation of state based on a perturbation theory for chain molecules. Industrial & Engineering Chemistry Research, 40(4), 1244-1260.
- Hansen, H. K., Rasmussen, P., Fredenslund, A., Schiller, M., & Gmehling, J. (1991). Vapor-liquid equilibria by UNIFAC group contribution. 5. Revision and extension. Industrial & Engineering Chemistry Research, 30(10), 2352-2355.
- Holderbaum, T., & Gmehling, J. (1991). PSRK: A group contribution equation of state based on UNIFAC. Fluid Phase Equilibria, 70(2-3), 251-265.
- DDBST GmbH. Published parameters for original UNIFAC. https://www.ddbst.com/published-parameters-unifac.html