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:

Each of these functions has three methods for computing cross-sections:

  1. at a single wavenumber, temperature, and pressure
  2. over a sorted vector of wavenumbers, a single temperature, and a single pressure
  3. 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.fvoigtFunction
fvoigt(ν, ν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.voigtFunction
voigt(ν, ν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!Function
voigt!(σ, ν, sl, T, P, Pₚ, Δνcut=25)

Identical to voigt, but fills the vector of cross-sections (σ) in-place.


Lorentz Profile

ClearSky.γlorentzFunction
γ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 atm
  • na: coefficient of temperature dependence of air-broadened half width
  • T: temperature [K]
  • P: air pressure [Pa]
  • Pₚ: partial pressure [Pa]
ClearSky.florentzFunction
florentz(ν, νl, γ)

Evaluate lorentz profile

Arguments

  • ν: profile evaluation wavenumber [cm$^{-1}$]
  • νl: wavenumber of absorption line [cm$^{-1}$]
  • γ: lorentzian broadening coefficient
ClearSky.lorentzFunction
lorentz(ν, ν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!Function
lorentz!(σ, ν, sl, T, P, Pₚ, Δνcut=25)

Identical to lorentz, fills the vector of cross-sections (σ) in-place.


Doppler Profile

ClearSky.αdopplerFunction
αdoppler(νl, μ, T)

Compute doppler (gaussian) broadening coefficient from line wavenumber νl [cm$^{-1}$], gas molar mass μ [kg/mole], and temperature T [K].

ClearSky.fdopplerFunction
fdoppler(ν, νl, α)

Evaluate doppler (gaussian) profile

Arguments

  • ν: profile evaluation wavenumber [cm$^{-1}$]
  • νl: wavenumber of absorption line [cm$^{-1}$]
  • α: doppler (gaussian) broadening coefficient
ClearSky.dopplerFunction
doppler(ν, ν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!Function
doppler!(σ, ν, sl, T, P, Pₚ, Δνcut=25)

Identical to doppler, but fills the vector of cross-sections (σ) in-place.


Perrin & Hartman Sublorentzian CO2 Profile

ClearSky.ΧPHCO2Function
Χ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.PHCO2Function
PHCO2(ν, ν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!Function
PHCO2!(σ, ν, sl, T, P, Pₚ, Δνcut=500)

Identical to PHCO2, but fills the vector of cross-sections (σ) in-place.


Other