Line Shapes
Line shapes are computed following the definitions and equations in HITRAN (and elsewhere).
In ClearSky
, line shapes can be computed from SpectralLines
objects and built in shape functions. The following shape functions are implemented with the necessary supporting functions:
voigt
lorentz
, pressure-broadeningdoppler
PHCO2
, the Perrin & Hartman sublorentzian shape for carbon dioxide
Each of these functions has three methods for computing cross-sections:
- at a single wavenumber, temperature, and pressure
- over a sorted vector of wavenumbers, a single temperature, and a single pressure
- the same as item 2, but computing cross-sections in-place
Using multiple dispatch, the arguments supplied to the functions determine the behavior. For example, calling the voigt
function with a single number for the ν
argument executes the function for a single cross-section. Calling the same function with a vector of wavenumbers in the ν
argument executes the version of the function optimized for that scenario.
Another way to get cross-sections is through gas objects, which are used for higher-level modeling.
A Note on Handling TIPS
Evaluating line shapes requires evaluating the temperature dependence of line intensities. To compute this scaling, the ratio of total internal partition functions (TIPS),
$Q(T_{ref})/Q(T)$
must be evaluated. The necessary information is provided by HITRAN for every isotopologue and computing the ratio requires interpolating a range of $Q(T)$ values for the appropriate temperature.
ClearSky
evaluates the ratio accurately and automatically inside the scaleintensity
function.
To facilitate this, the molparam.py
script was used to download Q data for each isotopologue, generate high-accuracy interpolating Chebyshev polynomials for each one, and write the information to a Julia source file called molparam.jl
. The pre-computed interpolating coefficients are defined directly in source code, allowing rapid and accurate evaluation of the TIPS ratio. The interpolating functions are guaranteed to reproduce the provided data with less than 1 % error between 25 and 1000 K.
Voigt Profile
ClearSky.fvoigt
— Functionfvoigt(ν, νl, α, γ)
Evaluate Voigt profile
Arguments
ν
: profile evaluation wavenumber [cm$^{-1}$]νl
: wavenumber of absorption line [cm$^{-1}$]α
: doppler (gaussian) broadening coefficientγ
: lorentzian broadening coefficient
ClearSky.voigt
— Functionvoigt(ν, νl, S, α, γ)
Evaluate Voigt absoption cross-section [cm$^2$/molecule]
Arguments
ν
: profile evaluation wavenumber [cm$^{-1}$]νl
: wavenumber of absorption line [cm$^{-1}$]S
: line absoption intensity [cm$^{-1}$/(molecule$\cdot$cm$^{-2}$)]α
: doppler (gaussian) broadening coefficientγ
: lorentzian broadening coefficient
voigt(ν, sl::SpectralLines, T, P, Pₚ, Δνcut=25)
Evaluate Voigt absorption cross-section at a single wavenumber.
voigt(ν, sl, T, P, Pₚ, Δνcut=25)
Compute a vector of Voigt absorption cross-sections [cm$^2$/molecule] from a SpectralLines
object. Temperature scaling and Voigt profiles are evaluated along the way.
Arguments
ν
: vector of wavenumbers indicating where to evaluate [cm$^{-1}$]sl
:SpectralLines
T
: temperature [K]P
: air pressure [Pa]Pₚ
: partial pressure [Pa]Δνcut
: profile truncation distance [cm$^{-1}$]
ClearSky.voigt!
— Functionvoigt!(σ, ν, sl, T, P, Pₚ, Δνcut=25)
Identical to voigt
, but fills the vector of cross-sections (σ
) in-place.
Lorentz Profile
ClearSky.γlorentz
— Functionγlorentz(γa, γs, na, T, P, Pₚ)
Compute lorentzian broadening coefficient
Arguments
γa
: air-broadened half width at half maximum (HWHM) [cm$^{-1}$/atm] at 296 K and 1 atmγs
: self-broadened half width at half maximum (HWHM) [cm$^{-1}$/atm] at 296 K and 1 atmna
: coefficient of temperature dependence of air-broadened half widthT
: temperature [K]P
: air pressure [Pa]Pₚ
: partial pressure [Pa]
ClearSky.florentz
— Functionflorentz(ν, νl, γ)
Evaluate lorentz profile
Arguments
ν
: profile evaluation wavenumber [cm$^{-1}$]νl
: wavenumber of absorption line [cm$^{-1}$]γ
: lorentzian broadening coefficient
ClearSky.lorentz
— Functionlorentz(ν, νl, S, γ)
Evaluate lorentzian absoption cross-section [cm$^2$/molecule]
Arguments
ν
: profile evaluation wavenumber [cm$^{-1}$]νl
: wavenumber of absorption line [cm$^{-1}$]S
: line absoption intensity [cm$^{-1}$/(molecule$\cdot$cm$^{-2}$)]γ
: lorentzian broadening coefficient
lorentz(ν, sl, T, P, Pₚ, Δνcut=25)
Compute a single lorentzian absorption cross-sections [cm$^2$/molecule] from a SpectralLines
object. Temperature scaling and lorentzian profiles are evaluated along the way.
Arguments
ν
: single wavenumber indicating where to evaluate [cm$^{-1}$]sl
:SpectralLines
T
: temperature [K]P
: air pressure [Pa]Pₚ
: partial pressure [Pa]Δνcut
: profile truncation distance [cm$^{-1}$]
lorentz(ν, sl, T, P, Pₚ, Δνcut=25)
Compute a vector of lorentzian absorption cross-sections [cm$^2$/molecule] from a SpectralLines
object. Temperature scaling and lorentzian profiles are evaluated along the way.
Arguments
ν
: vector of wavenumbers indicating where to evaluate [cm$^{-1}$]sl
:SpectralLines
T
: temperature [K]P
: air pressure [Pa]Pₚ
: partial pressure [Pa]Δνcut
: profile truncation distance [cm$^{-1}$]
ClearSky.lorentz!
— Functionlorentz!(σ, ν, sl, T, P, Pₚ, Δνcut=25)
Identical to lorentz
, fills the vector of cross-sections (σ
) in-place.
Doppler Profile
ClearSky.αdoppler
— Functionαdoppler(νl, μ, T)
Compute doppler (gaussian) broadening coefficient from line wavenumber νl
[cm$^{-1}$], gas molar mass μ
[kg/mole], and temperature T
[K].
ClearSky.fdoppler
— Functionfdoppler(ν, νl, α)
Evaluate doppler (gaussian) profile
Arguments
ν
: profile evaluation wavenumber [cm$^{-1}$]νl
: wavenumber of absorption line [cm$^{-1}$]α
: doppler (gaussian) broadening coefficient
ClearSky.doppler
— Functiondoppler(ν, νl, S, α)
Evaluate doppler (gaussian) absoption cross-section [cm$^2$/molecule]
Arguments
ν
: profile evaluation wavenumber [cm$^{-1}$]νl
: wavenumber of absorption line [cm$^{-1}$]S
: line absoption intensity [cm$^{-1}$/(molecule$\cdot$cm$^{-2}$)]α
: doppler (gaussian) broadening coefficient
doppler(ν, sl, T, P, Pₚ, Δνcut=25)
Evaluate a single doppler (gaussian) absoption cross-section [cm$^2$/molecule]. Temperature scaling and doppler profiles are evaluated along the way.
Arguments
ν
: wavenumber indicating where to evaluate [cm$^{-1}$]sl
:SpectralLines
T
: temperature [K]P
: air pressure [Pa]Pₚ
: partial pressure [Pa]Δνcut
: profile truncation distance [cm$^{-1}$]
doppler(ν, sl, T, P, Pₚ, Δνcut=25)
Compute a vector of doppler (gaussian) absorption cross-sections [cm$^2$/molecule] from a SpectralLines
object. Temperature scaling and doppler profiles are evaluated along the way.
Arguments
ν
: vector of wavenumbers indicating where to evaluate [cm$^{-1}$]sl
:SpectralLines
T
: temperature [K]P
: air pressure [Pa]Pₚ
: partial pressure [Pa]Δνcut
: profile truncation distance [cm$^{-1}$]
ClearSky.doppler!
— Functiondoppler!(σ, ν, sl, T, P, Pₚ, Δνcut=25)
Identical to doppler
, but fills the vector of cross-sections (σ
) in-place.
Perrin & Hartman Sublorentzian CO2 Profile
ClearSky.ΧPHCO2
— FunctionΧPHCO2(ν, νl, T)
Compute the Χ
(Chi) factor for sub-lorentzian CO2 line profiles, as in
Arguments
ν
: profile evaluation wavenumber [cm$^{-1}$]νl
: wavenumber of absorption line [cm$^{-1}$]T
: temperature [K]
ClearSky.PHCO2
— FunctionPHCO2(ν, νl, S, α)
Evaluate Perrin & Hartman sub-lorentzian absoption cross-section [cm$^2$/molecule] for CO2
Arguments
ν
: profile evaluation wavenumber [cm$^{-1}$]νl
: wavenumber of absorption line [cm$^{-1}$]T
: temperature [K]S
: line absoption intensity [cm$^{-1}$/(molecule$\cdot$cm$^{-2}$)]α
: doppler (gaussian) broadening coefficientγ
: lorentzian broadening coefficient
PHCO2(ν, sl, T, P, Pₚ, Δνcut=500)
Compute a single Perrin & Hartman sub-lorentzian CO2 absorption cross-sections [cm$^2$/molecule] from a SpectralLines
object. Temperature scaling and profiles are evaluated along the way.
Arguments
ν
: single wavenumber indicating where to evaluate [cm$^{-1}$]sl
:SpectralLines
T
: temperature [K]P
: air pressure [Pa]Pₚ
: partial pressure [Pa]Δνcut
: profile truncation distance [cm$^{-1}$]
PHCO2(ν, sl, T, P, Pₚ, Δνcut=500)
Compute a vector of Perrin & Hartman sub-lorentzian CO2 absorption cross-sections [cm$^2$/molecule] from a SpectralLines
object. Temperature scaling and profiles are evaluated along the way.
Arguments
ν
: vector of wavenumbers indicating where to evaluate [cm$^{-1}$]sl
:SpectralLines
T
: temperature [K]P
: air pressure [Pa]Pₚ
: partial pressure [Pa]Δνcut
: profile truncation distance [cm$^{-1}$]
ClearSky.PHCO2!
— FunctionPHCO2!(σ, ν, sl, T, P, Pₚ, Δνcut=500)
Identical to PHCO2
, but fills the vector of cross-sections (σ
) in-place.
Other
Missing docstring for faddeyeva
. Check Documenter's build log for details.
ClearSky.scaleintensity
— Functionscaleintensity(S, νl, Epp, M, I, T)
Compute the temperature scaling for line intensity.
Arguments
S
: spectal line intensity at 296 K [cm$^{-1}$/(molecule$\cdot$cm$^{-2}$)]νl
: wavenumber of line [cm$^{-1}$]Epp
: lower-state energy of transition [cm$^{-1}$]M
: HITRAN molecular identification numberI
: HITRAN local isotopologue numberT
: temperature [K]