Skip to content

Transport & volumetric properties

Pure and mixture transport properties (viscosity, thermal conductivity, surface tension, diffusivity) and liquid/vapour volumetric properties (Rackett and COSTALD volumes, Peneloux translation, densities).

See the physical & transport properties guide for worked examples.

Transport properties

transport

Transport properties: viscosity, thermal conductivity, surface tension, diffusivity.

Every routine dispatches per component between curated correlation fits (transcribed from open data into fugacio.thermo._property_data) and corresponding-states estimators, so the whole component database is covered; the mixture rules are the standard kinetic-theory and engineering combinations. All functions are differentiable in temperature and composition.

Modules:

Name Description
diffusivity

Binary diffusion coefficients: Fuller (gas) and Wilke-Chang (liquid).

surface_tension

Surface tension of pure liquids and mixtures.

thermal_conductivity

Thermal conductivity: dilute-gas and liquid, pure components and mixtures.

viscosity

Viscosity: dilute-gas and liquid, pure components and mixtures.

Functions:

Name Description
diffusion_volume

Fuller diffusion volume of a component (dimensionless table units).

fuller_diffusivity

Fuller-Schettler-Giddings binary gas diffusivity (m^2/s).

gas_diffusivity

Binary gas-phase diffusion coefficient D_AB(T, P) by Fuller (m^2/s).

liquid_diffusivity

Infinite-dilution liquid diffusivity of solute in solvent (m^2/s).

wilke_chang_diffusivity

Wilke-Chang infinite-dilution liquid diffusivity (m^2/s).

brock_bird_surface_tension

Brock-Bird corresponding-states surface tension (N/m).

mixture_surface_tension

Liquid-mixture surface tension by Winterfeld-Scriven-Davis (N/m).

surface_tensions

Per-component surface tensions sigma_i(T) (N/m).

winterfeld_scriven_davis

Winterfeld-Scriven-Davis mixture surface tension (N/m).

chung_thermal_conductivity_gas

Chung et al. dilute-gas thermal conductivity (W/m/K).

dippr9h_mixture

DIPPR9H (Li-style) liquid-mixture conductivity power law (W/m/K).

gas_mixture_thermal_conductivity

Dilute-gas mixture conductivity by Wassiljewa / Mason-Saxena (W/m/K).

gas_thermal_conductivities

Per-component dilute-gas thermal conductivities k_i(T) (W/m/K).

liquid_mixture_thermal_conductivity

Liquid mixture conductivity by the DIPPR9H mass-fraction rule (W/m/K).

liquid_thermal_conductivities

Per-component saturated-liquid thermal conductivities k_i(T) (W/m/K).

sato_riedel_thermal_conductivity

Sato-Riedel liquid thermal conductivity (W/m/K).

wassiljewa_mixture

Wassiljewa gas-mixture conductivity with Mason-Saxena weights (W/m/K).

chung_viscosity_gas

Chung et al. dilute-gas viscosity (Pa*s).

gas_mixture_viscosity

Dilute-gas mixture viscosity by Wilke's rule (Pa*s).

gas_viscosities

Per-component dilute-gas viscosities eta_i(T) (Pa*s).

grunberg_nissan_viscosity

Grunberg-Nissan rule for the viscosity of a liquid mixture (Pa*s).

letsou_stiel_viscosity

Letsou-Stiel high-temperature liquid viscosity (Pa*s).

liquid_mixture_viscosity

Liquid mixture viscosity by the Grunberg-Nissan rule (Pa*s).

liquid_viscosities

Per-component saturated-liquid viscosities eta_i(T) (Pa*s).

wilke_mixture_viscosity

Wilke's kinetic-theory rule for the viscosity of a gas mixture (Pa*s).

diffusion_volume

diffusion_volume(component: str | Component) -> float

Fuller diffusion volume of a component (dimensionless table units).

Uses the special-molecule table when the species is listed there, otherwise sums the atomic increments over the molecular formula. Ring corrections are not applied (the formula alone does not reveal rings), which biases cyclic species' volumes slightly high.

Raises:

Type Description
ValueError

if the formula contains an element without a Fuller increment.

fuller_diffusivity

fuller_diffusivity(
    t: ArrayLike,
    p: ArrayLike,
    mw_a: ArrayLike,
    mw_b: ArrayLike,
    v_a: ArrayLike,
    v_b: ArrayLike,
) -> Array

Fuller-Schettler-Giddings binary gas diffusivity (m^2/s).

D_AB = 0.00143 * T^1.75 / (P_bar * sqrt(M_AB) * (Vd_A^(1/3) + Vd_B^(1/3))^2) in cm^2/s, with M_AB = 2 / (1/M_A + 1/M_B) (g/mol) and the tabulated diffusion volumes Vd; converted to SI here (p in Pa).

gas_diffusivity

gas_diffusivity(
    component_a: str | Component,
    component_b: str | Component,
    t: ArrayLike,
    p: ArrayLike,
) -> Array

Binary gas-phase diffusion coefficient D_AB(T, P) by Fuller (m^2/s).

liquid_diffusivity

liquid_diffusivity(
    solute: str | Component,
    solvent: str | Component,
    t: ArrayLike,
) -> Array

Infinite-dilution liquid diffusivity of solute in solvent (m^2/s).

Wilke-Chang with the solvent viscosity from the curated correlations and the solute boiling-point volume from Tyn-Calus (needs the solute's vc; falls back to the tabulated liquid molar volume at the system temperature when vc is missing).

wilke_chang_diffusivity

wilke_chang_diffusivity(
    t: ArrayLike,
    mu_solvent: ArrayLike,
    mw_solvent: ArrayLike,
    vb_solute: ArrayLike,
    phi: ArrayLike = 1.0,
) -> Array

Wilke-Chang infinite-dilution liquid diffusivity (m^2/s).

D_AB = 7.4e-8 * sqrt(phi*M_B) * T / (eta_B * V_A^0.6) in cm^2/s with the solvent viscosity eta_B in cP and the solute boiling-point molar volume V_A in cm^3/mol; SI in and out here (mu_solvent in Pa*s, vb_solute in m^3/mol). phi is the solvent association factor (2.6 water, 1.9 methanol, 1.5 ethanol, 1.0 otherwise).

brock_bird_surface_tension

brock_bird_surface_tension(
    t: ArrayLike,
    tb: ArrayLike,
    tc: ArrayLike,
    pc: ArrayLike,
) -> Array

Brock-Bird corresponding-states surface tension (N/m).

sigma = Pc^(2/3) * Tc^(1/3) * Q * (1 - Tr)^(11/9) with the Miller factor::

Q = 0.1196 * (1 + Tbr * ln(Pc/1 atm) / (1 - Tbr)) - 0.279

where Pc enters the prefactor in bar and sigma emerges in mN/m (converted to N/m here); typical accuracy is ~5% for non-polar and weakly polar liquids, worse for alcohols and water (Poling et al., 5th ed., eq. 12-3.5).

mixture_surface_tension

mixture_surface_tension(
    components: list[str] | list[Component],
    t: ArrayLike,
    x: Array,
) -> Array

Liquid-mixture surface tension by Winterfeld-Scriven-Davis (N/m).

surface_tensions

surface_tensions(
    components: list[str] | list[Component], t: ArrayLike
) -> Array

Per-component surface tensions sigma_i(T) (N/m).

Curated Mulero-Cachadina fit where available; Brock-Bird otherwise (which needs a normal boiling point; components lacking tb raise).

winterfeld_scriven_davis

winterfeld_scriven_davis(
    x: Array, sigma: Array, v_liquid: Array
) -> Array

Winterfeld-Scriven-Davis mixture surface tension (N/m).

sigma_m = sum_i sum_j x_i x_j V_i V_j sqrt(sigma_i sigma_j) / (sum_i x_i V_i)^2: volume-fraction-squared weighting of the geometric pair means (Winterfeld, Scriven & Davis 1978). Exact in the pure limits.

chung_thermal_conductivity_gas

chung_thermal_conductivity_gas(
    t: ArrayLike,
    tc: ArrayLike,
    omega: ArrayLike,
    mw: ArrayLike,
    mu_gas: ArrayLike,
    cp_ideal: ArrayLike,
) -> Array

Chung et al. dilute-gas thermal conductivity (W/m/K).

k = 3.75 * Psi * eta * R / M with the internal-degrees-of-freedom factor::

Psi = 1 + alpha * (0.215 + 0.28288*alpha - 1.061*beta + 0.26665*Z)
              / (0.6366 + beta*Z + 1.061*alpha*beta)

where alpha = Cv_ig/R - 3/2, beta = 0.7862 - 0.7109*omega + 1.3168*omega^2 and Z = 2.0 + 10.5*Tr^2 (Chung et al. 1984; Poling et al., 5th ed., eq. 10-3.14). mu_gas is the dilute-gas viscosity (Pa*s), cp_ideal the ideal-gas heat capacity (J/mol/K), mw in g/mol.

dippr9h_mixture

dippr9h_mixture(w: Array, k: Array) -> Array

DIPPR9H (Li-style) liquid-mixture conductivity power law (W/m/K).

k_m = (sum_i w_i * k_i^-2)^(-1/2) with mass fractions w: the standard recommendation for nonaqueous liquid mixtures (Poling et al., 5th ed., eq. 10-12.4).

gas_mixture_thermal_conductivity

gas_mixture_thermal_conductivity(
    components: list[str] | list[Component],
    t: ArrayLike,
    y: Array,
) -> Array

Dilute-gas mixture conductivity by Wassiljewa / Mason-Saxena (W/m/K).

gas_thermal_conductivities

gas_thermal_conductivities(
    components: list[str] | list[Component], t: ArrayLike
) -> Array

Per-component dilute-gas thermal conductivities k_i(T) (W/m/K).

Curated DIPPR-102 fit where available, Chung corresponding states otherwise.

liquid_mixture_thermal_conductivity

liquid_mixture_thermal_conductivity(
    components: list[str] | list[Component],
    t: ArrayLike,
    x: Array,
) -> Array

Liquid mixture conductivity by the DIPPR9H mass-fraction rule (W/m/K).

liquid_thermal_conductivities

liquid_thermal_conductivities(
    components: list[str] | list[Component], t: ArrayLike
) -> Array

Per-component saturated-liquid thermal conductivities k_i(T) (W/m/K).

Curated DIPPR-100 fit where available, Sato-Riedel otherwise (which needs a normal boiling point; components lacking tb raise).

sato_riedel_thermal_conductivity

sato_riedel_thermal_conductivity(
    t: ArrayLike,
    tc: ArrayLike,
    tb: ArrayLike,
    mw: ArrayLike,
) -> Array

Sato-Riedel liquid thermal conductivity (W/m/K).

k = (1.1053 / sqrt(MW)) * (3 + 20*(1-Tr)^(2/3)) / (3 + 20*(1-Tbr)^(2/3)) (Poling et al., 5th ed., eq. 10-9.2); a rough but robust estimate, typically within ~15-25% for organic liquids. mw in g/mol.

wassiljewa_mixture

wassiljewa_mixture(
    y: Array, k: Array, mu: Array, mw: Array
) -> Array

Wassiljewa gas-mixture conductivity with Mason-Saxena weights (W/m/K).

k_m = sum_i y_i k_i / sum_j y_j A_ij where A_ij is the Wilke phi_ij evaluated from the dilute-gas viscosities (the Mason-Saxena recommendation with the proportionality constant at one).

chung_viscosity_gas

chung_viscosity_gas(
    t: ArrayLike,
    tc: ArrayLike,
    vc: ArrayLike,
    omega: ArrayLike,
    mw: ArrayLike,
    dipole: ArrayLike = 0.0,
    kappa: ArrayLike = 0.0,
) -> Array

Chung et al. dilute-gas viscosity (Pa*s).

eta = 40.785 * Fc * sqrt(MW*T) / (Vc^(2/3) * Omega_v) in micropoise, with Fc = 1 - 0.2756*omega + 0.059035*mu_r^4 + kappa (Chung, Lee & Starling 1984; Poling et al., 5th ed., eq. 9-4.10). mw in g/mol, vc in m^3/mol, dipole in debye; kappa is the association factor (0.076 for water, 0 for normal fluids).

gas_mixture_viscosity

gas_mixture_viscosity(
    components: list[str] | list[Component],
    t: ArrayLike,
    y: Array,
) -> Array

Dilute-gas mixture viscosity by Wilke's rule (Pa*s).

gas_viscosities

gas_viscosities(
    components: list[str] | list[Component], t: ArrayLike
) -> Array

Per-component dilute-gas viscosities eta_i(T) (Pa*s).

Curated DIPPR-102 fit where available, Chung corresponding states otherwise.

grunberg_nissan_viscosity

grunberg_nissan_viscosity(
    x: Array, mu: Array, g: Array | None = None
) -> Array

Grunberg-Nissan rule for the viscosity of a liquid mixture (Pa*s).

ln eta_m = sum_i x_i ln eta_i + (1/2) sum_i sum_j x_i x_j G_ij: the interaction matrix G defaults to zero (ideal logarithmic mixing), which is the standard engineering assumption when no binary data exist.

letsou_stiel_viscosity

letsou_stiel_viscosity(
    t: ArrayLike,
    tc: ArrayLike,
    pc: ArrayLike,
    omega: ArrayLike,
    mw: ArrayLike,
) -> Array

Letsou-Stiel high-temperature liquid viscosity (Pa*s).

eta * xi = (1.5174 - 2.135*Tr + 0.75*Tr^2)*1e-5 + omega*(4.2552 - 7.674*Tr + 3.4*Tr^2)*1e-5 with the inverse-viscosity group xi = 2173.424 * Tc^(1/6) / (sqrt(MW) * Pc^(2/3)) (SI units). Nominal validity 0.76 <= Tr <= 0.98; Fugacio also uses it as the last-resort fallback at lower Tr, clipped to stay positive.

liquid_mixture_viscosity

liquid_mixture_viscosity(
    components: list[str] | list[Component],
    t: ArrayLike,
    x: Array,
) -> Array

Liquid mixture viscosity by the Grunberg-Nissan rule (Pa*s).

liquid_viscosities

liquid_viscosities(
    components: list[str] | list[Component], t: ArrayLike
) -> Array

Per-component saturated-liquid viscosities eta_i(T) (Pa*s).

Curated DIPPR-101 fit where available, Letsou-Stiel otherwise.

wilke_mixture_viscosity

wilke_mixture_viscosity(
    y: Array, mu: Array, mw: Array
) -> Array

Wilke's kinetic-theory rule for the viscosity of a gas mixture (Pa*s).

eta_m = sum_i y_i eta_i / sum_j y_j phi_ij with::

phi_ij = [1 + (eta_i/eta_j)^(1/2) (M_j/M_i)^(1/4)]^2
         / [8 (1 + M_i/M_j)]^(1/2)

(Poling et al., 5th ed., eq. 9-5.13/14). Exact in the pure limits.

Volumetric properties

volumetric

Liquid molar volume and density: Rackett, COSTALD, DIPPR fits, Peneloux shifts.

Cubic equations of state are excellent for phase equilibrium but notoriously poor for saturated-liquid density (Peng-Robinson is typically 5-15% off). This module supplies the standard remedies:

  • Rackett (rackett_volume): the two-line corresponding-states classic, sharpened by the Spencer-Danner Z_RA parameter when the curated tables carry one (zra_estimate otherwise);
  • COSTALD (costald_volume, costald_mixture_volume): the Hankinson-Thomson correlation with its characteristic volumes and SRK acentric factors, including the standard mixing rules;
  • DIPPR-105 fits: per-component saturated-density correlations transcribed from open data (the most accurate route where available);
  • Peneloux volume translation (peneloux_shift, translated_molar_volume): the constant shift v = v_eos - sum x_i c_i that repairs cubic-EOS liquid volumes without changing phase equilibrium (fugacity ratios are invariant to a composition-linear translation).

The name-based dispatchers (liquid_molar_volumes, mixture_liquid_volume, liquid_density) choose the best available route per component (DIPPR fit, then COSTALD, then Rackett) so callers get a sensible answer for every database component, differentiable in T and composition throughout.

Functions:

Name Description
zra_estimate

Estimate the Rackett compressibility Z_RA = 0.29056 - 0.08775*omega.

rackett_volume

Rackett saturated-liquid molar volume (m^3/mol).

costald_volume

COSTALD saturated-liquid molar volume of a pure component (m^3/mol).

costald_mixture_volume

COSTALD saturated molar volume of a liquid mixture (m^3/mol).

peneloux_shift

Peneloux volume-translation constant c_i (m^3/mol) for SRK or PR.

translated_molar_volume

Peneloux-translated EOS molar volume v_eos - sum_i x_i c_i (m^3/mol).

liquid_molar_volumes

Per-component saturated-liquid molar volumes v_i^L(T) (m^3/mol).

mixture_liquid_volume

Saturated-liquid molar volume of a mixture (m^3/mol).

liquid_density

Mass density of a saturated liquid mixture (kg/m^3).

vapor_density

Mass density of a vapour mixture from the cubic EOS (kg/m^3).

translated_liquid_volume_for

Peneloux-translated EOS liquid molar volume for named components (m^3/mol).

tyn_calus_vb

Tyn-Calus estimate of the molar volume at the normal boiling point (m^3/mol).

zra_estimate

zra_estimate(omega: ArrayLike) -> Array

Estimate the Rackett compressibility Z_RA = 0.29056 - 0.08775*omega.

The Yamada-Gunn estimate, used when no fitted Spencer-Danner value is tabulated for a component.

rackett_volume

rackett_volume(
    t: ArrayLike,
    tc: ArrayLike,
    pc: ArrayLike,
    zra: ArrayLike,
) -> Array

Rackett saturated-liquid molar volume (m^3/mol).

V = (R*Tc/Pc) * Z_RA^(1 + (1-Tr)^(2/7)) (Rackett 1970, with the Spencer-Danner Z_RA). Tr is clipped at one so the expression stays defined (and differentiable) through the critical point.

costald_volume

costald_volume(
    t: ArrayLike,
    tc: ArrayLike,
    vchar: ArrayLike,
    omega_srk: ArrayLike,
) -> Array

COSTALD saturated-liquid molar volume of a pure component (m^3/mol).

V = V* . V_R^0(Tr) . (1 - omega_SRK . V_R^delta(Tr)) with the characteristic volume V* and SRK acentric factor from the curated tables (Hankinson & Thomson 1979). Valid for 0.25 < Tr < 0.95: the upper clipping keeps the correlation finite as Tr -> 1.

costald_mixture_volume

costald_mixture_volume(
    t: ArrayLike,
    x: Array,
    tc: Array,
    vchar: Array,
    omega_srk: Array,
) -> Array

COSTALD saturated molar volume of a liquid mixture (m^3/mol).

Applies the original Hankinson-Thomson mixing rules::

V*_m  = (1/4) [ sum x_i V*_i + 3 (sum x_i V*_i^(2/3)) (sum x_i V*_i^(1/3)) ]
Tc_m  = sum_i sum_j x_i x_j sqrt(V*_i Tc_i V*_j Tc_j) / V*_m
w_m   = sum x_i w_SRK_i

then evaluates the pure-component correlation at the mixture parameters.

peneloux_shift

peneloux_shift(
    eos: CubicEOS,
    tc: ArrayLike,
    pc: ArrayLike,
    zra: ArrayLike,
) -> Array

Peneloux volume-translation constant c_i (m^3/mol) for SRK or PR.

c = k1*(k2 - Z_RA)*R*Tc/Pc, positive for most fluids, so the translated liquid volume v - c shrinks toward the experimental value. Raises for EOS families without published constants (VDW, RK).

translated_molar_volume

translated_molar_volume(
    eos: CubicEOS,
    t: ArrayLike,
    p: ArrayLike,
    x: Array,
    tc: Array,
    pc: Array,
    omega: Array,
    zra: Array,
    *,
    phase: str = "liquid",
    kij: Array | None = None,
) -> Array

Peneloux-translated EOS molar volume v_eos - sum_i x_i c_i (m^3/mol).

The translation is linear in composition, so all fugacity-coefficient ratios (and therefore every phase-equilibrium result) are unchanged; only the volumetric (and caloric-at-constant-V) properties improve.

liquid_molar_volumes

liquid_molar_volumes(
    components: list[str] | list[Component], t: ArrayLike
) -> Array

Per-component saturated-liquid molar volumes v_i^L(T) (m^3/mol).

Picks the best available correlation for each component: the transcribed DIPPR-105 density fit, then COSTALD, then Rackett (with the curated Z_RA or its acentric-factor estimate). Defined for every database component.

mixture_liquid_volume

mixture_liquid_volume(
    components: list[str] | list[Component],
    t: ArrayLike,
    x: Array,
    *,
    method: str = "auto",
) -> Array

Saturated-liquid molar volume of a mixture (m^3/mol).

method="auto" (default) mole-fraction-averages the best available pure volumes (liquid_molar_volumes), so the pure-component limits match the transcribed DIPPR fits exactly. method="costald" opts into the Hankinson-Thomson corresponding-states mixing rules, which capture excess volume but require a curated characteristic volume for every component and inherit COSTALD's weakness for strongly polar species (e.g. water). method="amagat" is an explicit alias for the default ideal mixing.

liquid_density

liquid_density(
    components: list[str] | list[Component],
    t: ArrayLike,
    x: Array,
    *,
    method: str = "auto",
) -> Array

Mass density of a saturated liquid mixture (kg/m^3).

vapor_density

vapor_density(
    components: list[str] | list[Component],
    t: ArrayLike,
    p: ArrayLike,
    y: Array,
    *,
    eos: CubicEOS = PR,
    kij: Array | None = None,
) -> Array

Mass density of a vapour mixture from the cubic EOS (kg/m^3).

translated_liquid_volume_for

translated_liquid_volume_for(
    components: list[str] | list[Component],
    t: ArrayLike,
    p: ArrayLike,
    x: Array,
    *,
    eos: CubicEOS = PR,
    kij: Array | None = None,
) -> Array

Peneloux-translated EOS liquid molar volume for named components (m^3/mol).

Convenience wrapper over translated_molar_volume that assembles the critical constants and Z_RA values (curated, else estimated) from the component database.

tyn_calus_vb

tyn_calus_vb(vc: ArrayLike) -> Array

Tyn-Calus estimate of the molar volume at the normal boiling point (m^3/mol).

Vb = 0.285 * Vc^1.048 with both volumes in cm^3/mol (Poling et al., 5th ed., eq. 4-11.2); inputs and outputs here are SI (m^3/mol). Used by the Wilke-Chang diffusivity estimator.