Skip to the content.

This guide documents the thermal conductivity calculation methods available in NeqSim for gas, liquid, and multiphase systems.

Table of Contents


Overview

Thermal conductivity ($\lambda$ or $k$) describes a material’s ability to conduct heat. It is essential for:

Units:

Setting a conductivity model:

fluid.getPhase("gas").getPhysicalProperties().setConductivityModel("Chung");
fluid.getPhase("oil").getPhysicalProperties().setConductivityModel("PFCT");
fluid.getPhase("gas").initPhysicalProperties();
fluid.getPhase("oil").initPhysicalProperties();

Select the model after the flash and initial property calculation, then reinitialize each changed phase as shown. Model keys are case-sensitive. Unsupported keys currently fall back to PFCT, so use one of the documented keys and cover model selection in tests.


Available Models

PFCT (Pedersen)

The Pedersen Corresponding States method uses methane as a reference fluid with molecular weight corrections.

Class: PFCTConductivityMethodMod86

Principle: Uses corresponding states with methane as reference:

\[\lambda_{mix} = \lambda_{ref}(T_0, P_0) \cdot \frac{\alpha_{mix}}{\alpha_0}\]

where:

Corresponding state mapping: \(T_0 = T \cdot \frac{T_{c,ref}}{T_{c,mix}} \cdot \frac{\alpha_0}{\alpha_{mix}}\)

\[P_0 = P \cdot \frac{P_{c,ref}}{P_{c,mix}} \cdot \frac{\alpha_0}{\alpha_{mix}}\]

Applicable phases: Gas, Oil

Best for:

Usage:

fluid.getPhase("oil").getPhysicalProperties().setConductivityModel("PFCT");

Chung Method

The Chung method (1988) is a corresponding states correlation based on kinetic theory.

Class: ChungConductivityMethod

Equation (dilute gas): \(\lambda_0 = \frac{7.452 \eta_0 \Psi}{M}\)

where:

The correction factor accounts for:

Dense fluid correction: \(\lambda = \lambda_0 \cdot G_2(T^*, \rho^*) + B_1 q B_2\)

where $G_2$ and $B$ terms account for density effects.

Applicable phases: Primarily gas phase

Best for:

Usage:

fluid.getPhase("gas").getPhysicalProperties().setConductivityModel("Chung");
fluid.getPhase("gas").initPhysicalProperties();

Chung Dense Method

Chung-dense implements the full Chung et al. correlation, including dilute-gas and density-dependent contributions. Use it when pressure or liquid-like density makes the dilute Chung model insufficient.

The implementation uses Chung’s conformal mixture rules with unity binary combining factors, including the effective transport molar mass, critical volume, critical temperature, acentric factor, dipole and association terms. The actual mixture molar mass converts EOS mass density to molar density. Ideal-gas molar heat capacity is independent of the total phase amount. The association input is the component’s viscosity correction factor, not its CPA association volume.

The dense equation is evaluated consistently in SI:

\[\lambda = \frac{31.2\eta_0\Psi}{M}\left(H_2^{-1}+B_6 y\right)+q B_7 y^2\sqrt{T_r}H_2\]

Here $M$ is in kg/mol, $\eta_0$ in Pa s, $y=\rho_{mol}V_c/6$ with matched volume units, $T_r=T/T_c$, and $q=3.586\times10^{-3}\sqrt{T_c/M}/V_c^{2/3}$ for $V_c$ in cm³/mol. The collision integral uses $T^*=1.2593T_r$. Coefficients follow the original Chung table reproduced in Bouraba et al. (2017), Table A.2, including the negative association coefficient in $B_6$ and the original $B_7$ row. They differ from some reproductions of the fifth-edition table. This choice is explicit; it is not a claim that every later handbook coefficient table has been independently inspected.

Zero density uses the analytic limit; expm1 prevents cancellation at very low density. Nonfinite inputs, nonpositive required constants, unnormalized compositions, negative density, $y\geq1$, and $T^*$ outside 0.3–100 are rejected. There is no critical enhancement; these bounds are mathematical/domain guards, not a guarantee of accuracy for every fluid within them. Use a qualified reference-fluid model for near-critical design calculations.

This corrects the earlier amount-dependent heat capacity, reduced temperature, mixture rules, transport-association input, mixed CGS/SI conversion and missing $B_7$ dense term. Only explicitly selected Chung-dense calculations change. PFCT defaults are unchanged. Frozen equation checks, amount invariance and lifecycle regressions are described in the method audit.

Class: ChungDenseConductivityMethod

Applicable phases: Gas and liquid

Usage:

fluid.getPhase("gas").getPhysicalProperties().setConductivityModel("Chung-dense");
fluid.getPhase("gas").initPhysicalProperties();

Polynomial Correlation

Uses component-specific polynomial coefficients from the database.

Class: Conductivity (in liquid package)

Equation: \(\lambda = A + BT + CT^2\)

where A, B, C are component-specific parameters.

Database columns: LIQUIDCONDUCTIVITY1, LIQUIDCONDUCTIVITY2, LIQUIDCONDUCTIVITY3

Mixing rule: \(\lambda_{mix} = \sum_i x_i \lambda_i\)

Applicable phases: Liquid

Best for:

Usage:

fluid.getPhase("oil").getPhysicalProperties().setConductivityModel("polynom");
fluid.getPhase("oil").initPhysicalProperties();

CO2 Reference

Pure-CO₂ thermal conductivity model implemented as a polynomial fit to reference data generated with CoolProp. The implementation is checked against NIST values in CO2ConductivityMethodTest and uses Span-Wagner properties if a usable density is unavailable.

Class: CO2ConductivityMethod

Constraint: The phase must contain pure CO₂. The implementation rejects mixtures; do not use CO2Model for CO₂-rich multicomponent streams. NeqSim does not enforce a temperature-pressure validity envelope for this polynomial, so validate extrapolated states independently.

Best for:

Usage:

fluid.getPhase("gas").getPhysicalProperties().setConductivityModel("CO2Model");
fluid.getPhase("gas").initPhysicalProperties();

Filippov Liquid Mixing and Pressure Factor

The Filippov key combines database liquid polynomials using mass fractions. It is also the built-in aqueous conductivity model in the explicitly selected GLYCOL, AMINE and CO2WATER model sets:

\[k_0=\sum_i w_i k_i-0.72\sum_{i<j}w_iw_j|k_i-k_j|\]

Its enabled-by-default pressure option now evaluates the complete Missenard-derived Danner/Daubert expression published in the AFT CHEMPAK manual, section 8.6.5:

\[F=0.98+0.0079P_rT_r^{1.4}+0.63T_r^{1.2}\frac{P_r}{30+P_r}\]

Here $T_r=T/\sum_i x_iT_{c,i}$ and $P_r=P/\sum_i x_iP_{c,i}$; T is K, and P and Pc use the same pressure unit (internally bara). The output is $k=k_0\max(1,F)$ in W/(m K). The previously implemented square-root factor omitted the rational term.

The unity floor and bypass at $T_r\geq0.95$ or $P_r<0.01$ are retained implementation choices, not accuracy bounds supplied by CHEMPAK. Pseudo-critical data below 1e-10 (K or bara) bypasses the correction; this does not qualify the uncorrected polynomials. Nonfinite pseudo-critical data returns NaN; nonfinite state values can also yield NaN. The cutoff at 0.95 is discontinuous. No saturation pressure is calculated or subtracted.

This qualifies implementation of that analytic derived expression, not the original Missenard tabulated-Q variant or sixth-edition conformance. The mixture pseudo-critical extension and database polynomial fits need independent physical validation. Do not infer an uncertainty or a design validity envelope from the numerical tests. Default PFCT selection is unchanged. The specialized sets above receive this correction automatically for their aqueous phases; their physical accuracy is not established by the route tests. For positive Tr below 0.95 and Pr at most 0.5, the full factor is below 0.994, so the unity floor can return one without evaluating a fractional power. Higher-pressure calculations use one fifth root to supply both temperature powers.

The following example, including the disable switch, executes in FilippovConductivityMethodTest.guideExampleAndPressureUnits:

SystemInterface fluid = new SystemSrkEos(350, 100);
fluid.addComponent("n-hexane", 1);
fluid.setMixingRule("classic");
new ThermodynamicOperations(fluid).TPflash();
fluid.initProperties();
fluid.getPhase(0).getPhysicalProperties().setConductivityModel("Filippov");
fluid.getPhase(0).initPhysicalProperties();
double corrected = fluid.getPhase(0).getThermalConductivity("W/mK");
FilippovConductivityMethod model = (FilippovConductivityMethod)
    fluid.getPhase(0).getPhysicalProperties().getConductivityModel();
model.setUsePressureCorrection(false);
fluid.getPhase(0).initPhysicalProperties();
double uncorrected = fluid.getPhase(0).getThermalConductivity("W/mK");

Use the existing Java phase/property interfaces (or the same objects through the Python bridge). No detached conductivity implementation or new invocation protocol is introduced. See the method audit for frozen equation values and exclusions.


Model Selection Guide

Application Recommended Model Notes
Petroleum mixtures PFCT Corresponding states with MW correction
Low-density gas Chung Dilute-gas contribution
Dense gas or liquid Chung-dense Includes density-dependent contribution
Simple liquid mixtures polynom Uses database parameters
Pure CO₂ CO2Model Rejects mixtures; validate extrapolation
Wide P-T range PFCT Robust extrapolation
Polar systems Chung Includes polar corrections

Additional implemented keys are friction theory, WaterModel, and H2Model. They are specialized models and should be selected only with a composition and phase appropriate to the underlying correlation.


Usage Examples

Basic Conductivity Calculation

import neqsim.thermo.system.SystemSrkEos;
import neqsim.thermo.system.SystemInterface;
import neqsim.thermodynamicoperations.ThermodynamicOperations;

// Create and flash fluid
SystemInterface fluid = new SystemSrkEos(350.0, 50.0);
fluid.addComponent("methane", 0.85);
fluid.addComponent("ethane", 0.10);
fluid.addComponent("propane", 0.05);
fluid.setMixingRule("classic");

ThermodynamicOperations ops = new ThermodynamicOperations(fluid);
ops.TPflash();

// Initialize physical properties
fluid.initPhysicalProperties();

// Get thermal conductivity
double gasConductivity = fluid.getPhase("gas").getThermalConductivity("W/mK");
if (!(gasConductivity > 0.0)) {
    throw new IllegalStateException("Expected positive gas thermal conductivity");
}

Comparing Conductivity Models

String[] models = {"PFCT", "Chung-dense"};
double[] conductivities = new double[models.length];

for (int i = 0; i < models.length; i++) {
    SystemInterface fluid = new SystemSrkEos(350.0, 50.0);
    fluid.addComponent("methane", 0.85);
    fluid.addComponent("ethane", 0.10);
    fluid.addComponent("propane", 0.05);
    fluid.setMixingRule("classic");
    ThermodynamicOperations ops = new ThermodynamicOperations(fluid);
    ops.TPflash();
    fluid.initProperties();
    
    fluid.getPhase("gas").getPhysicalProperties().setConductivityModel(models[i]);
    fluid.getPhase("gas").initPhysicalProperties();
    conductivities[i] = fluid.getPhase("gas").getThermalConductivity("W/mK");
}

Conductivity vs Pressure

SystemInterface baseFluid = new SystemSrkEos(350.0, 10.0);
baseFluid.addComponent("methane", 1.0);
baseFluid.setMixingRule("classic");

double[] pressuresBara = {10, 50, 100, 150, 200};
double[] conductivities = new double[pressuresBara.length];

for (int i = 0; i < pressuresBara.length; i++) {
    SystemInterface fluid = baseFluid.clone();
    fluid.setPressure(pressuresBara[i], "bara");
    
    ThermodynamicOperations ops = new ThermodynamicOperations(fluid);
    ops.TPflash();
    fluid.initPhysicalProperties();
    
    conductivities[i] = fluid.getPhase(0).getThermalConductivity("W/mK");
}

Two-Phase System

SystemInterface fluid = new SystemSrkEos(280.0, 30.0);
fluid.addComponent("methane", 0.5);
fluid.addComponent("n-pentane", 0.5);
fluid.setMixingRule("classic");
fluid.setMultiPhaseCheck(true);

ThermodynamicOperations ops = new ThermodynamicOperations(fluid);
ops.TPflash();
fluid.initPhysicalProperties();

double gasConductivity = fluid.hasPhaseType("gas")
    ? fluid.getPhase("gas").getThermalConductivity("W/mK") : Double.NaN;
double oilConductivity = fluid.hasPhaseType("oil")
    ? fluid.getPhase("oil").getThermalConductivity("W/mK") : Double.NaN;

Physical Background

Kinetic Theory (Dilute Gas)

For dilute gases, thermal conductivity is related to viscosity through:

\[\lambda = \frac{f \cdot \eta \cdot C_v}{M}\]

where:

Mixing Rules

For mixtures, thermal conductivity is typically calculated using:

Mass fraction weighting: \(\lambda_{mix} = \sum_i w_i \lambda_i\)

Molar weighting with interaction: \(\lambda_{mix} = \sum_i \sum_j \frac{x_i x_j \lambda_{ij}}{\sum_k x_k \phi_{ik}}\)

where $\lambda_{ij}$ is a combining rule and $\phi_{ik}$ is an interaction factor.

Pressure Effects

Thermal conductivity increases with pressure, particularly in dense fluids:

The PFCT method accounts for this through corresponding states mapping to reference fluid behavior.


Temperature and Pressure Dependence

Gases

Liquids


References

  1. Pedersen, K.S., et al. (1989). Thermal Conductivity of Crude Oils. Chem. Eng. Sci.
  2. Chung, T.H., et al. (1988). Generalized Multiparameter Correlation. I&EC Res.
  3. Huber, M.L., et al. (2016). New International Formulation for the Thermal Conductivity of CO₂. J. Phys. Chem. Ref. Data.
  4. Scalabrin, G., et al. (2006). A Reference Multiparameter Thermal Conductivity Equation for Carbon Dioxide. J. Phys. Chem. Ref. Data.
  5. Poling, B.E., et al. (2001). The Properties of Gases and Liquids, 5th Ed.