# 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-broadening`doppler`

`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`

— Function`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.voigt`

— Function`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.γ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 atm`na`

: coefficient of temperature dependence of air-broadened half width`T`

: temperature [K]`P`

: air pressure [Pa]`Pₚ`

: partial pressure [Pa]

`ClearSky.florentz`

— Function`florentz(ν, νl, γ)`

Evaluate lorentz profile

**Arguments**

`ν`

: profile evaluation wavenumber [cm$^{-1}$]`νl`

: wavenumber of absorption line [cm$^{-1}$]`γ`

: lorentzian broadening coefficient

`ClearSky.lorentz`

— Function`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.α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`

— Function`fdoppler(ν, νl, α)`

Evaluate doppler (gaussian) profile

**Arguments**

`ν`

: profile evaluation wavenumber [cm$^{-1}$]`νl`

: wavenumber of absorption line [cm$^{-1}$]`α`

: doppler (gaussian) broadening coefficient

`ClearSky.doppler`

— Function`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.Χ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`

— Function`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

`ClearSky.scaleintensity`

— Function`scaleintensity(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 number`I`

: HITRAN local isotopologue number`T`

: temperature [K]