Gas mixtures at finite density#
This chapter extends the pure-gas calculation in the Quick start. Read
Conventions and Dispersion models first, especially the distinction between
polarizability and refractive index. The API is optmat.gas.mixture with
optmat.gas.mixture_eos; the review register records the
pair-model decisions.
A gas-filled fibre often holds a mixture: helium and argon, neon and argon, air, or a molecular gas in a noble-gas buffer. At the tens of bar of such fills the refractive index of a mixture is not the sum of its constituents’ indices. It is the Lorentz-Lorenz law of the whole mixture, including the pair terms between unlike molecules, at the mixture’s own density. This page covers both (OEP 4): the optics at stated densities, and the equation of state that gives the densities at a pressure and temperature.
import numpy as np
from optmat.gas.mixture import mixture_optics
he_ar = mixture_optics(["He", "Ar"])
n = 1.25e26 # m^-3 of each: about 10 bar together at 294 K
dn = he_ar.refractivity(800e-9, {"He": n, "Ar": n}) # n - 1
chi = he_ar.susceptibility(800e-9, {"He": n, "Ar": n}) # complex n^2 - 1
dchi = he_ar.dsusceptibility_domega(800e-9, {"He": n, "Ar": n}) # s
per_species = he_ar.dsusceptibility_ddensity(800e-9, {"He": n, "Ar": n}) # m^3
spread = he_ar.refractivity_uncertainty(800e-9, {"He": n, "Ar": n})
assert 1.4e-3 < float(dn) < 1.5e-3 and float(spread) < 2e-4 * float(dn)
assert [p.status for p in he_ar.pairs] == ["curated", "curated", "estimate"]
bound = he_ar.density_bound({"He": 0.5, "Ar": 0.5}) # m^-3, the optical domain
With the density from the mixture’s equation of state:
import warnings
from optmat.conditions import State
from optmat.gas.mixture import mixture_optics
from optmat.gas.mixture_eos import mixture_equation_of_state
he_ne = mixture_equation_of_state({"He": 0.5, "Ne": 0.5})
assert (he_ne.method, he_ne.status) == ("virial", "validated")
densities = he_ne.partial_densities(State(pressure=1e6, temperature=294.0)) # m^-3
dn = mixture_optics(["He", "Ne"]).refractivity(800e-9, densities)
with warnings.catch_warnings():
warnings.simplefilter("ignore") # a provisional equation warns when it is built
air = mixture_equation_of_state("dry air (N2, O2, Ar)")
assert (air.method, air.status) == ("multi-fluid", "provisional")
The law#
In the low-density cluster expansion the Lorentz-Lorenz function of a mixture is the sum over its molecules plus the sum over its pairs (Buckingham and Pople 1955):
with \(\rho_s = N_s/N_A\) the molar density of species \(s\) and \(\alpha_s\) its polarizability from its recommended model (The gas models). For one species \(B_{ss}\) is that gas’s refractivity virial coefficient \(B_R\), so the law is optmat’s pure law exactly (Conventions). The mixture’s \(y\) is inverted once, \(\chi = 3y/(1 - y)\) and \(n - 1 = \chi/(1 + \sqrt{1 + \chi})\). Summing the constituents’ indices, or their susceptibilities, is wrong at the order of the pair terms.
Real and complex.
refractivityis in the pure models’ real-polarizability convention, and for one species equalsModel.refractivityat that density.susceptibilityuses each constituent’s complex polarizability, and for one species \(\sqrt{1 + \chi}\) equalsModel.refractive_index. The two differ only for an absorbing constituent: for O3 at 255 nm, 1 bar and 294 K, the real part of the complex index lies \(5.27 \times 10^{-8}\) below the real convention’s \(n - 1\), which is \((\operatorname{Im}\chi)^2/24\). An absorbing constituent warns, as its pure model does.Densities.
densitiesmaps each species to its number density in m⁻³. The keys must be exactly the mixture’s species: a missing or extra species is refused by name. The wavelength and the densities broadcast by numpy’s rules. Two labelled populations of one species are combined by the caller first: they are one species in the pair sum.Derivatives are closed forms. With \(\partial\chi/\partial y = 3/(1-y)^2\), \(\partial_\omega\chi\) takes each constituent’s
dpolarizability_domega, and \(\partial\chi/\partial N_s = (3/(1-y)^2)\,[A_s + 2\sum_t B_{st}\rho_t]/N_A\).
The pair terms#
Every pair of a mixture has a PairTerm (MixtureOptics.pairs, like terms first) with
its status, source and reason.
Like terms are each gas’s curated \(B_R\) (
data/gas/refractivity_virial.toml), dispersing with the gas, \(B_{ss} = b_s A_s\). A static (dielectric) value would be taken as an optical term only where its induced part is stated; every present choice is optical.O2’s like term is Egan et al.’s published estimate, \(b = 0.210\) cm³/mol at 633 nm with 50 % uncertainty:
provisional, with its uncertainty in the sensitivity. Its pairs are estimates, and its mixturesprovisional.A gas without a curated \(B_R\) (D2, N2O, CO, O3) is
unknown: it enters with \(b = 0\) and the declared scale \(|b| \le 2.5\) cm³/mol, and its mixtures areprovisional.Unlike terms. No unlike-pair refractivity coefficient is curated: none is known to have been measured for the pairs of interest (the search is recorded as TC-775). Each is estimated as the mean of its like terms, \(B_{st} = \tfrac12(B_{ss} + B_{tt})\), each like term dispersing with its own \(A\), with status
estimate, orunknownwhere a like term is. Its standard uncertainty is \(\max(|B_{ss}|, |B_{tt}|)\), taking an unknown like term at its scale. That is a sensitivity assumption, not a statistical uncertainty: cancellation between like terms of opposite sign, helium’s and argon’s, cannot shrink it.The sensitivity.
refractivity_uncertaintycombines the estimated and unknown terms’ uncertainties linearly, as fully correlated, and gives their effect on \(n - 1\).
At 800 nm and 294 K, the ideal-gas density at each pressure, equal mole fractions (air: CIPM-2007’s N2, O2 and Ar, renormalised):
Mixture |
Pressure |
\(n - 1\) |
Its sensitivity |
Relative |
GVD, fs²/m |
Its sensitivity |
|---|---|---|---|---|---|---|
He/Ar |
10 bar |
1.441e-3 |
2.2e-7 |
1.5e-4 |
96.8 |
0.016 |
He/Ar |
30 bar |
4.326e-3 |
2.0e-6 |
4.6e-4 |
290.8 |
0.14 |
Ne/Ar |
10 bar |
1.588e-3 |
2.2e-7 |
1.4e-4 |
101.1 |
0.016 |
Ne/Ar |
30 bar |
4.767e-3 |
2.0e-6 |
4.2e-4 |
303.6 |
0.14 |
He/Ne |
10 bar |
4.656e-4 |
1.4e-8 |
3.0e-5 |
14.2 |
0.00042 |
He/Ne |
30 bar |
1.397e-3 |
1.2e-7 |
8.9e-5 |
42.5 |
0.0037 |
Air |
10 bar |
2.660e-3 |
8.6e-8 |
3.2e-5 |
205.9 |
0.0063 |
Air |
30 bar |
7.989e-3 |
7.7e-7 |
9.7e-5 |
619.1 |
0.057 |
Air’s sensitivity comes mainly from oxygen’s estimated like term and its pairs. The GVD
columns are by differences of refractivity and refractivity_uncertainty in
frequency.
The domain#
The law is second order in density. density_bound(composition) gives the optical
domain, the lower of two densities:
the third term. Where the neglected third term reaches 10⁻³ of \(y\): \(\rho = \sqrt{10^{-3}\,A_R/|C_R|}\), with the largest \(|C_R/A_R|\) of the species present. \(C_R\) is measured for Ar, Kr, Xe, H2, N2, CH4, CO2 and SF6 (Achtermann et al. 1991 and 1993), with a measured bound for He. Neon, whose \(C_R\) is not measured, takes the declared scale \(|C_R| \le 600\,B_R^2/A_R\). A gas with neither \(B_R\) nor \(C_R\) gives no third-term bound.
the estimated and unknown terms. Where their uncertainty reaches 10⁻³ of \(y\).
Both are taken as the smallest over the qualified intervals. The bounds are about 6960
mol/m³ for argon and 6670 for N2 (the third term), 2450 for 50/50 He/Ar
(the pair terms), 6150 for air (oxygen’s third term, at the declared scale on its
estimated \(B_R\)), and 400 for a pure gas with an unknown like term. Beyond the bound the
optics warn (ModelRangeWarning). In wavelength, a mixture holds on the intersection
of its constituents’ qualified intervals (MixtureOptics.intervals), and warns outside
it whatever the densities.
Identity#
A mixture’s identity (Identity, status and validity) binds its constituents’ models by their digests,
with the pair rules and the third terms. Its status is provisional where any term is
unknown, and validated otherwise. No unlike term has been checked against a
measurement, and the page states that rather than implying it.
How much each piece matters#
For a 50/50 helium-argon fill at 294 K and 800 nm, the relative change in \(n - 1\) and in the GVD when one piece of the law is left out or replaced, against the full law (the default equation of state and the mixture optics). The gallery example The dispersion of a helium-argon fill against pressure plots it from 1 to 60 bar.
Pressure |
\(n - 1\) |
Dilute law |
No pair terms |
Partial-pressure density |
Multi-fluid density |
Unlike-pair estimate |
|---|---|---|---|---|---|---|
10 bar |
1.436e-3 |
−1.1e-3 / −2.1e-3 |
−1.5e-4 / −1.6e-4 |
+6.0e-3 / +6.3e-3 |
+2.1e-3 / +2.1e-3 |
±1.5e-4 |
30 bar |
4.283e-3 |
−3.3e-3 / −6.2e-3 |
−4.4e-4 / −4.8e-4 |
+1.8e-2 / +1.9e-2 |
+5.7e-3 / +5.7e-3 |
±4.5e-4 |
60 bar |
8.492e-3 |
−6.5e-3 / −1.2e-2 |
−8.6e-4 / −9.4e-4 |
+3.6e-2 / +3.8e-2 |
+9.1e-3 / +9.2e-3 |
±9.0e-4 |
Each cell is the change in \(n - 1\) / in the GVD; the last column is the estimate’s declared uncertainty in \(n - 1\).
The density rule matters most. The partial-pressure rule leaves out the unlike pairs’ second virial and, beyond first order, also moves the composition toward argon: together 6 × 10⁻³ at 10 bar.
The density method is the next. The two methods differ by 2 × 10⁻³ at 10 bar, about ten times the optics’ own pair terms and their uncertainty. Since the multi-fluid model misses the measured cross virials (TC-779), the default takes the fallback, which misses Blancett et al.’s data by up to 7 × 10⁻⁴ in \(Z\) at 28 bar. So the density, not the optics, sets the accuracy of a helium-argon fill.
Lorentz-Lorenz against the dilute law is 1.1 × 10⁻³ in \(n - 1\) at 10 bar and twice that in the GVD.
The pair terms are 1.5 × 10⁻⁴ at 10 bar. The declared uncertainty of the unlike estimate is about the same size, and it grows linearly with pressure.
The density#
mixture_equation_of_state(composition, method=None) gives a mixture’s equation of
state at a fixed composition (OEP 4, sections 4.2 and 7.4). number_density(state) is
the total density, and partial_densities(state) gives each species’ \(x_s N\), the keys
the optics take. pressure(number_density, temperature) is the inverse, and
compressibility and second_virial complete it. The densities follow the CODATA
convention of Transport of the dilute gases’s equations of state: \(N = p/(Z k_B T)\) with the
equation’s own \(Z\). molar_mass is the composition’s, \(\sum_s x_s M_s\), kg/mol, with
each constituent’s equation-of-state molar mass, whichever the method.
There are three methods, chosen per mixture by the evidence for its pairs:
multi-fluid: CoolProp’s multi-fluid Helmholtz model, where every pair has a binary model fitted to data of that pair. It reduces to each pure fluid’s equation at \(x_s = 1\).virial: each species’ own equation at its partial density, plus the measured cross second virial coefficients, \(p = \sum_s p_s(x_s\rho, T) + RT\rho^2\sum_{s\ne t}x_s x_t B_{st}(T)\). It preserves the composition exactly and holds while \(|\rho\sum_{s\ne t}x_s x_t B_{st}| \le 10^{-2}\), beyond which it warns. Each pair’s \(B_{st}\) is a measured \(B_{12}\), or a measured excess \(E\) with \(B_{12} = E + (B_{11} + B_{22})/2\) from the reference equations’ pure \(B\). The method holds only at the temperatures where they are measured, and refuses others.partial-density: the same with every unknown cross coefficient zero, the composition-preserving form of the partial-pressure rule. It isprovisional.
The comparison. Each multi-fluid model is compared with every curated measured cross, excess and mixture second virial, and every mixture density or compressibility factor, between 250 and 350 K and up to the mixture’s optical domain. A point passes within twice the combined uncertainty; a pair qualifies when at least 95 % of its points pass in each kind, with at least three points. The rule was fixed before the comparison (TC-778). The fallback is compared with the densities in the same way, within its truncation bound (TC-779).
Pair |
Multi-fluid model |
Its comparison |
Fallback’s \(B_{12}\) |
Fallback against densities |
|---|---|---|---|---|
He-Ar |
Tkaczuk et al. 2020 |
\(E\) about 10 cm³/mol low; Z up to 1e-2 low at 100 bar: fails |
Brewer and Vaughn’s \(E\) |
Blancett et al.’s Z: 16 of 78 pass, up to 7e-4 low: fails |
Ne-Ar |
Tkaczuk et al. 2020 |
\(E\) 3.4 against 13.0 cm³/mol: fails |
Brewer and Vaughn’s \(E\) |
Kestin et al.’s densities: 7 of 8 pass: fails |
He-Ne |
Tkaczuk et al. 2020 |
\(E\) −2.6 against 0.76 cm³/mol; Z 2e-3 low at 36 bar: fails |
Brewer and Vaughn’s \(E\) |
Vogl and Hall’s Z: 35 of 36 pass: qualified |
N2-O2 |
Gernert 2013 |
\(E\) −0.34 against −1.0(2) cm³/mol: fails |
Martin et al.’s \(E\) |
no density data |
Ar-N2 |
Gernert 2013 |
\(E\) −0.16 against −0.57(10): fails |
Brewer and Vaughn’s \(E\) |
no density data |
Ar-O2 |
Gernert 2013 |
3 of 4 pass: fails |
Martin et al.’s \(E\) |
no density data |
Ar-CH4, CH4-CO2, CH4-N2 |
Kunz and Wagner 2012 |
Martin et al.’s \(E\), 3 of 3 each: qualified |
— |
— |
Tkaczuk et al. fitted their models to densities and phase equilibria and did not fit the second virials. CoolProp reproduces their check values (Table 8), so the gap in the cross virials is their models’, not CoolProp’s.
The defaults.
He/Ne:
virial, validated.He/Ar and Ne/Ar:
virial, provisional, with the deviations above. The fallback is five to ten times closer to Blancett et al.’s helium-argon data than the multi-fluid model.Dry air:
multi-fluid, provisional, at every temperature (the author’s decision, TC-796). Its \(Z\) agrees with CIPM-2007’s within 8.6 × 10⁻⁶ over 600–1100 hPa and 17–27 °C, where CIPM-2007’s \(u(Z)\) is 1.5 × 10⁻⁵. The fallback agrees within 1.8 × 10⁻⁶, but holds only at Martin et al.’s 290–320 K; it can be asked for by name (method="virial"). By the rule of TC-778 alone, the fallback would have been the default.The Kunz and Wagner pairs above:
multi-fluid, validated.Other mixtures: the partial-density rule, provisional.
A provisional equation warns when it is built. Any method can be asked for by name where the pairs support it, and the identity records the method and status.
Air two ways. The labelled N2/O2/Ar fill uses this equation of state, and
Gas.Air’s pseudo-pure dry air (Lemmon et al. 2000) serves the air models of
The gas models. At 10 bar and 294 K the multi-fluid N2/O2/Ar density lies 2.0 × 10⁻⁴
below the pseudo-pure one, and the fallback 1.8 × 10⁻⁴ above the multi-fluid one. Their
molar masses differ too: 28.9597 g/mol for the N2/O2/Ar fill, against CoolProp’s
28.96546 g/mol for the pseudo-pure air (TC-832).
Phases. The multi-fluid method checks the mixture’s own phase with CoolProp’s flash,
and a state that is not a single gas phase raises StateError. The fallback checks each
constituent at its partial density against its own saturated vapour. That is a necessary
condition, not a sufficient one: its mixtures are not checked for phase separation.
This page documents what OEP 4 proposed and implemented: its theory, decisions and phase reports are the record.