optmat.gas.lorentz_lorenz#
Convert between the per-particle polarizability and the refractive index.
The package stores gas dispersion as the dynamic dipole polarizability alpha(omega)
of one atom or molecule, a property of the particle that does not depend on the state
of the gas. The refractive index at number density N follows from the
Lorentz-Lorenz (Clausius-Mossotti) relation
with alpha in SI (C m^2/V). The dilute limit chi = N alpha / eps0 is the linear
density approximation; it differs from Lorentz-Lorenz by the factor
1 / (1 - y) ~ 1 + chi/3, a relative error of about 2e-4 for argon at 1 bar but about
2 % at 100 bar.
Beyond Lorentz-Lorenz, the refractivity virial expansion (n^2 - 1)/(n^2 + 2) = A_R rho
+ B_R rho^2 + ... (rho the molar density, A_R the molar refractivity) adds the
pair term. Every function here takes an optional ratio virial = B_R / A_R
(m^3/mol) and uses y = (N alpha / 3 eps0)(1 + virial rho); the ratio is of order
1e-7 to 1e-6 m^3/mol, a correction of 1e-6 to 1e-5 at 1 atm.
Atomic-unit polarizabilities convert with
AU_POLARIZABILITY; the molar refractivity
A_R = N_A alpha / (3 eps0), used by gas metrology, with molar_refractivity().
Module Attributes
The version of this module's evaluation code, in the identity of every model that evaluates through it; raised whenever the code changes its output (OEP 1, section 4.8). |
Functions
|
Return d alpha / d chi of the inverse Lorentz-Lorenz relation. |
|
Return the molar refractivity |
|
Return the polarizability from |
|
Return the polarizability from |
|
Return the complex refractive index from a complex polarizability. |
|
Return |
|
Return |
|
Return the dilute-limit susceptibility |
- optmat.gas.lorentz_lorenz.EVALUATION_VERSION: Final = 1#
The version of this module’s evaluation code, in the identity of every model that evaluates through it; raised whenever the code changes its output (OEP 1, section 4.8).
- optmat.gas.lorentz_lorenz.dpolarizability_dsusceptibility(chi, density, virial=0.0)[source]#
Return d alpha / d chi of the inverse Lorentz-Lorenz relation.
With
alpha = 3 eps0 chi / [N P (chi + 3)](polarizability_from_susceptibility(),Pthe pair factor of the refractivity virial atN),d alpha / d chi = 9 eps0 / [N P (chi + 3)^2]. For a formula inn - 1,d chi / d(n - 1) = 2 n.- Parameters:
- chiarray_like or float
Susceptibility
n^2 - 1, > -1; complex for an absorbing medium.- densityfloat
Number density in m^-3, > 0.
- virialfloat, optional
B_R / A_Rin m^3/mol (0 by default: no pair term).
- Returns:
- numpy.ndarray
d alpha / d chi, C m^2/V.
Examples
>>> h = 1e-9 >>> numeric = (polarizability_from_susceptibility(5e-4 + h, 2.687e25) ... - polarizability_from_susceptibility(5e-4 - h, 2.687e25)) / (2 * h) >>> bool(abs(dpolarizability_dsusceptibility(5e-4, 2.687e25) / numeric - 1) < 1e-6) True
- optmat.gas.lorentz_lorenz.molar_refractivity(polarizability)[source]#
Return the molar refractivity
A_R = N_A alpha / (3 eps0).- Parameters:
- polarizabilityarray_like or float
Per-particle dipole polarizability in C m^2/V.
- Returns:
- numpy.ndarray
Molar refractivity in m^3/mol (multiply by 1e6 for the cm^3/mol of gas metrology).
Examples
Helium’s static polarizability, 1.383760 a.u., gives the static molar refractivity of gas metrology:
>>> from optmat.constants import AU_POLARIZABILITY >>> f"{float(molar_refractivity(1.383760 * AU_POLARIZABILITY)) * 1e6:.5f}" '0.51725'
- optmat.gas.lorentz_lorenz.polarizability_from_refractivity(refractivity_value, density, virial=0.0)[source]#
Return the polarizability from
n - 1at number densityN.- Parameters:
- refractivity_valuearray_like or float
n - 1.- densityfloat
Number density in m^-3, > 0.
- virialfloat, optional
B_R / A_Rin m^3/mol (0 by default: no pair term).
- Returns:
- numpy.ndarray
The polarizability in C m^2/V, the shape of
refractivity_value.
Examples
>>> from optmat.constants import AU_POLARIZABILITY >>> alpha = polarizability_from_refractivity(2.772112e-4, 2.687e25) >>> f"{float(alpha / AU_POLARIZABILITY):.5f}" '11.08000'
- optmat.gas.lorentz_lorenz.polarizability_from_susceptibility(chi, density, virial=0.0)[source]#
Return the polarizability from
chi = n^2 - 1(inverse Lorentz-Lorenz).- Parameters:
- chiarray_like or float
Susceptibility
n^2 - 1, > -1.- densityfloat
Number density in m^-3, > 0.
- virialfloat, optional
B_R / A_Rin m^3/mol (0 by default: no pair term).
- Returns:
- numpy.ndarray
alpha = 3 eps0 y / Nwithy = chi / (chi + 3), in C m^2/V.
Examples
>>> alpha = polarizability_from_susceptibility(5.544992e-4, 2.687e25) >>> from optmat.constants import AU_POLARIZABILITY >>> f"{float(alpha / AU_POLARIZABILITY):.4f}" '11.0800'
- optmat.gas.lorentz_lorenz.refractive_index(polarizability, density, virial=0.0)[source]#
Return the complex refractive index from a complex polarizability.
- Parameters:
- polarizabilityarray_like or complex
Per-particle dipole polarizability in C m^2/V;
Im alpha > 0is absorption.- densityfloat
Number density in m^-3.
- virialfloat, optional
B_R / A_Rin m^3/mol (0 by default: no pair term).
- Returns:
- numpy.ndarray
n = sqrt(1 + chi)withchi = 3 y / (1 - y)andy = (N alpha / 3 eps0)(1 + b rho)(complex;Im n > 0is absorption), the shape ofpolarizability.
Examples
>>> from optmat.constants import AU_POLARIZABILITY >>> n = refractive_index((11.08 + 0.01j) * AU_POLARIZABILITY, 2.687e25) >>> f"{float(n.real - 1):.6e} {float(n.imag):.3e}" '2.772112e-04 2.502e-07'
- optmat.gas.lorentz_lorenz.refractivity(polarizability, density, virial=0.0)[source]#
Return
n - 1from the Lorentz-Lorenz relation, without cancellation.- Parameters:
- polarizabilityarray_like or float
Per-particle dipole polarizability in C m^2/V.
- densityfloat
Number density in m^-3.
- virialfloat, optional
B_R / A_Rin m^3/mol (0 by default: no pair term).
- Returns:
- numpy.ndarray
n - 1 = chi / (1 + sqrt(1 + chi)), the shape ofpolarizability.
Examples
>>> from optmat.constants import AU_POLARIZABILITY >>> f"{float(refractivity(11.08 * AU_POLARIZABILITY, 2.687e25)):.6e}" '2.772112e-04'
- optmat.gas.lorentz_lorenz.susceptibility(polarizability, density, virial=0.0)[source]#
Return
chi = n^2 - 1from the Lorentz-Lorenz relation.- Parameters:
- polarizabilityarray_like or float
Per-particle dipole polarizability
alphain C m^2/V (real).- densityfloat
Number density
Nin m^-3, >= 0.- virialfloat, optional
B_R / A_Rin m^3/mol (0 by default: no pair term).
- Returns:
- numpy.ndarray
chi = 3 y / (1 - y)withy = (N alpha / 3 eps0)(1 + b rho), the shape ofpolarizability.
Examples
>>> from optmat.constants import AU_POLARIZABILITY >>> f"{float(susceptibility(11.08 * AU_POLARIZABILITY, 2.687e25)):.6e}" '5.544992e-04'
- optmat.gas.lorentz_lorenz.susceptibility_dilute(polarizability, density)[source]#
Return the dilute-limit susceptibility
chi = N alpha / eps0.This is linear density scaling, exact only as
N -> 0; it is provided to measure the error of that approximation againstsusceptibility().- Parameters:
- polarizabilityarray_like or float
Per-particle dipole polarizability in C m^2/V.
- densityfloat
Number density in m^-3.
- Returns:
- numpy.ndarray
N alpha / eps0, the shape ofpolarizability.
Examples
>>> from optmat.constants import AU_POLARIZABILITY >>> f"{float(susceptibility_dilute(11.08 * AU_POLARIZABILITY, 2.687e25)):.6e}" '5.543968e-04'