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 |
liquid_diffusivity |
Infinite-dilution liquid diffusivity of |
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 |
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 |
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 |
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 |
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 |
wilke_mixture_viscosity |
Wilke's kinetic-theory rule for the viscosity of a gas mixture (Pa*s). |
diffusion_volume
¶
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
¶
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 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
¶
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 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 (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
¶
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
¶
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 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
¶
Dilute-gas mixture viscosity by Wilke's rule (Pa*s).
gas_viscosities
¶
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 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
¶
Per-component saturated-liquid viscosities eta_i(T) (Pa*s).
Curated DIPPR-101 fit where available, Letsou-Stiel otherwise.
wilke_mixture_viscosity
¶
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-DannerZ_RAparameter when the curated tables carry one (zra_estimateotherwise); - 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 shiftv = v_eos - sum x_i c_ithat 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 |
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 |
translated_molar_volume |
Peneloux-translated EOS molar volume |
liquid_molar_volumes |
Per-component saturated-liquid molar volumes |
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
¶
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 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 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
¶
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 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.