Skip to the content.

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

The component, blob, experiment, and fluid database wrappers share JDBC lifecycle handling through NeqSimDatabaseBase. All four wrappers implement AutoCloseable and should be closed with Java try-with-resources. Each instance owns its statement and connection; repeated initialization reuses them. Closing attempts both resources, even if statement cleanup fails, and preserves additional SQL errors as suppressed exceptions. A subsequent query or execution can reopen a closed wrapper. Wrappers are not thread-safe and should not be shared between concurrent operations.

Existing concrete APIs remain compatible: NeqSimDataBase.execute(String) returns a boolean, while blob, experiment, and fluid execute(String) methods return void. The fluid wrapper retains its legacy log-and-return error behavior and getResultSet(String database, String sqlString) overload; the database label does not change the active connection. Other wrappers propagate SQL failures with their original cause. The inherited FileSystemSettings constants remain available for existing callers. The blob wrapper loads the H2 driver for H2 and H2RT, without the removed JDBC-ODBC bridge.

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:


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. For names shared with the standard table, neutral components use COMP.csv as the source of their common pure-component parameters. The extended table keeps its own unique ID and COMPINDEX, and ion rows retain their electrolyte model parameters. Newly imported standard names receive unique IDs. The stored COMP_EXT.csv is synchronized with the neutral rows by python3 devtools/repair_water_cp_placeholders.py --write; the database loader also reapplies the standard values on switching modes so future additions to COMP.csv cannot silently revive stale extended values. 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:

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:

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.

If all five liquid-vapor coefficients are zero, NeqSim also reports the correlation as unavailable, even if an imported row has a live type label. It does not infer or store a fitted Antoine curve from a normal boiling point. Supply a sourced fit when vapor pressure is required.

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, T above the component’s critical temperature, nonfinite/nonpositive evaluated pressure, or evaluated pressure above the component’s finite critical pressure. A missing or nonfinite critical pressure also makes the result unavailable. 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; rejected results are not clipped to Pc and admitted results 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 synchronizes common neutral pure-component properties from the standard table, including unavailable-data markers and corrected acetone coefficients. Ion-specific extended properties remain separate.

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.

Repaired water Cp placeholders (issue #4049)

The 130 non-water hydrocarbon rows in COMP.csv that previously contained water’s exact five ideal-gas Cp coefficients now have component-specific polynomials. The 121 corresponding rows present in COMP_EXT.csv have the same replacement. Other shared neutral pure-component fields have likewise been aligned between the two stored tables; their row IDs remain independent. Water’s own coefficients are retained. The full list of Cp names, CAS numbers, structure-group counts, method, and predicted values at 298.15 and 500 K is in the Cp replacement inventory. The migration can be checked with python3 devtools/repair_water_cp_placeholders.py --check.

For 1,2,4-trimethylbenzene, CPA–CPE are a quartic least-squares fit to NIST Chemistry WebBook gas-phase Cp data for CAS 95-63-6 over 273.15–1000 K (maximum error at the ten tabulated points: 0.365 J/(mol K)). The remaining 129 estimates use the Joback–Reid group-contribution method for ideal-gas Cp:

\[C_p^{ig}(T)=(\sum n_i a_i-37.93)+(\sum n_i b_i+0.210)T+(\sum n_i c_i-3.91\times10^{-4})T^2+(\sum n_i d_i+2.06\times10^{-7})T^3\]

The Joback–Reid values are estimates, not measured component correlations; isomers with the same first-order group counts receive the same estimate. The structure decomposition checks each row’s carbon/hydrogen count against its formula, and the resulting Cp is positive at 250, 298.15, 500, 800, and 1000 K. Use 250–1000 K as the documented screening interval for these estimates; validate individual compounds against experimental data for engineering caloric work. The NIST fit has direct supporting data only over 273.15–1000 K.

Independent points illustrate the estimation error: the method gives 104.85 and 189.59 J/(mol K) for cyclohexane at 298.15 and 500 K, compared with NIST’s 105.3 and 188.68; for trans-2-pentene it gives 105.91 and 162.54 against 108.9 and 162.0. These comparisons validate scale and trend, not a universal error bound for all 129 hydrocarbons.

The extended database includes many other GEN rows absent from the standard table. Their Cp provenance has not been established by this shared-component repair; a matching water polynomial in such a row must not be interpreted as measured data. Ion-specific extended properties are intentionally exempt from the neutral-component synchronization.

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 Separate legacy reference metadata J/mol Not the formation enthalpy used by getHID
GIBBSENERGYOFFORMATION Gibbs energy of formation J/mol Chemical equilibrium
ENTHALPYOFFORMATION Standard ideal-gas enthalpy of formation at 298.15 K for reviewed neutral species J/mol Reaction thermodynamics and optional formation-referenced stream enthalpy
FORMATIONENTHALPYSOURCE Provenance of a reviewed gas-phase formation enthalpy; blank means unavailable - Enables explicit formation-reference calculations; zero values require provenance too
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

Formation enthalpy availability and sources

getHID(T) retains the default sensible-enthalpy convention, zero at 273.15 K. Enable fluid.setUseIdealGasEnthalpyOfFormation(true) to include ENTHALPYOFFORMATION and integrate Cp from 298.15 K, where the tabulated formation enthalpy applies. See the reference-state guide. This does not use Href, which is separate legacy metadata.

The following gas-phase values have explicit provenance. Values are stored in J/mol; the table displays kJ/mol. Each link points to the NIST Chemistry WebBook entry (SRD 69). Chase values use the displayed Shomate H reference constant; Cp continues to use NeqSim’s existing polynomial, not the Shomate correlation.

Component Formation enthalpy at 298.15 K (kJ/mol) Source
methane -74.87310 Chase 1998
CO2 -393.5224 Chase 1998
water (ideal gas) -241.8264 Chase 1998
CO -110.5271 Chase 1998
ammonia -45.89806 Chase 1998
H2S -20.600 CODATA 1984
ethane -83.800 Pittam and Pilcher 1972
propane -104.700 Pittam and Pilcher 1972
hydrogen 0 Element standard state
nitrogen 0 Element standard state
oxygen 0 Element standard state
helium 0 Element standard state
argon 0 Element standard state

In particular, helium no longer carries the old -242000 J/mol placeholder. The extended-database loader copies these reviewed value/source pairs from COMP.csv into the loaded extended table. Other extended entries remain unreviewed. The optional column is also preserved when adding missing standard components. Older custom databases without the column continue to work in legacy mode; they cannot silently opt into formation-based enthalpy.

Blank provenance does not mean that formation enthalpy is physically zero. It means the entry has not been reviewed for this gas-phase reference. Supply a finite value with setIdealGasEnthalpyOfFormation(value) on each phase’s component before enabling the system option, or add a sourced database entry. The setter marks the value as user-supplied. Aqueous ionic formation properties must not be interpreted as ideal-gas values and remain outside this option. Generated TBP estimates and combined pseudo-component estimates retain their legacy numeric values but have no reviewed provenance. Supply appropriate formation data explicitly before using those fractions in this reference mode.

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 (legacy model parameter)
PC bara 45.99 220.89 (legacy model parameter)
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

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);

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.


Water reference constants and model compatibility

neqsim.thermo.WaterReferenceConstants exposes the IAPWS-95 critical point of ordinary water: CRITICAL_TEMPERATURE_K = 647.096, CRITICAL_PRESSURE_PA = 22064000, and CRITICAL_PRESSURE_BARA = 220.64. These are physical reference values from the IAPWS G5-01(2026) guideline, section 4.1. The Henry-law and humid-air IAPWS correlations use this shared reference. These constants do not apply to isotopically substituted water.

The COMP water row retains the established simulation parameters TC = 374.15 °C (647.30 K) and PC = 220.89 bara. ComponentInterface.getTC() and getPC() return these model parameters, including explicit user overrides, rather than replacing them with reference values. The legacy values are not the IAPWS physical critical point; no claim of experimental fitting provenance is made for them.

Replacing the shared parameters changes cubic-EOS terms, CPA attraction functions, transport correlations and flash initialization. The direct substitution in #4128 caused phase-count, chemical-closure, salt-saturation and hydrate-inventory regressions. Migration of these model parameters remains unqualified and must include model-specific assessment and physical validation, rather than changing expected test results alone. Issue #4091 therefore remains open for the model migration and viscosity-data concerns.

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.py emits no missing_unifac_row finding at all, so regenerating unifac_known_issues.tsv from 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 changes job skips the whole test matrix when a pull request touches no .java or .xml file, so a change to COMP.csv or the UNIFAC tables alone goes green with these gates never executed. Run them locally:

./mvnw test -Dtest=ComponentDatabaseIntegrityTest,UnifacDatabaseIntegrityTest

Note the comma: surefire treats + as a literal, and -Dtest=A+B matches nothing and fails with “No tests matching pattern”.


See Also


References

  1. Soave, G. (1972). Equilibrium constants from a modified Redlich-Kwong equation of state. Chemical Engineering Science, 27(6), 1197-1203.
  2. Peng, D. Y., & Robinson, D. B. (1976). A new two-constant equation of state. Industrial & Engineering Chemistry Fundamentals, 15(1), 59-64.
  3. Kontogeorgis, G. M., et al. (1999). An equation of state for associating fluids. Industrial & Engineering Chemistry Research, 38(10), 4073-4082.
  4. 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.
  5. 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.
  6. Holderbaum, T., & Gmehling, J. (1991). PSRK: A group contribution equation of state based on UNIFAC. Fluid Phase Equilibria, 70(2-3), 251-265.
  7. DDBST GmbH. Published parameters for original UNIFAC. https://www.ddbst.com/published-parameters-unifac.html