ARTS  2.3.1285(git:92a29ea9-dirty)
linemixing.cc File Reference

Line mixing calculation implementation. More...

#include "linemixing.h"
#include "abs_species_tags.h"
#include "complex.h"
#include "lin_alg.h"
#include "linefunctions.h"
#include "linescaling.h"
#include "sorting.h"
#include "species_info.h"
#include "wigner_functions.h"

Go to the source code of this file.

Enumerations

enum  Species { Species::CO2, Species::O2_66 }
 

Functions

Numeric getB0 (const SpeciesTag &main)
 
AdiabaticFactor adiabatic_factor (const SpeciesTag &main, const SpeciesTag &collider)
 
BasisRate basis_rate (const SpeciesTag &main, const SpeciesTag &collider, const Numeric &T, const Numeric &T0)
 
Matrix relaxation_matrix_calculations (const AbsorptionLines &band, const Vector &population, const SpeciesTag &collider, const Numeric &collider_vmr, const Numeric &T, const Index &size)
 
void normalize_relaxation_matrix (Matrix &W, const Vector &population, const Vector &, const AbsorptionLines &band, const SpeciesAuxData &partition_functions, const Numeric &T)
 
Matrix hartmann_relaxation_matrix (const AbsorptionLines &band, const Vector &population, const Vector &d0, const ArrayOfSpeciesTag &colliders, const Vector &colliders_vmr, const SpeciesAuxData &partition_functions, const Numeric &T, const Index &size)
 
Numeric population_density (Numeric T, Numeric E0, Numeric F0, Numeric QT)
 
Numeric dpopulation_densitydT (Numeric T, Numeric E0, Numeric F0, Numeric QT, Numeric dQTdT)
 
Vector population_density_vector (const AbsorptionLines &band, const SpeciesAuxData &partition_functions, const Numeric &T)
 Compute the population density. More...
 
Vector dipole_vector (const AbsorptionLines &band, const SpeciesAuxData &partition_functions)
 Dipole vector. More...
 
Vector reduced_dipole_vector (const AbsorptionLines &band, const RedPoleType type)
 Reduced dipole vector. More...
 
Vector rosenkranz_first_order (const AbsorptionLines &band, const Matrix &W, const Vector &d0)
 Computes Y for Rosenkranz's line mixing coefficients. More...
 
Vector rosenkranz_shifting_second_order (const AbsorptionLines &band, const Matrix &W)
 Computes DV for Rosenkranz's line mixing coefficients. More...
 
Vector rosenkranz_scaling_second_order (const AbsorptionLines &band, const Matrix &W, const Vector &d0)
 Computes G for Rosenkranz's line mixing coefficients. More...
 
Matrix hartmann_ecs_interface (const AbsorptionLines &band, const ArrayOfSpeciesTag &collider_species, const Vector &collider_species_vmr, const SpeciesAuxData &partition_functions, const Numeric &T, const Index &size)
 Energy corrected sudden relaxation matrix using Hartmann's method. More...
 
void linearized_relaxation_matrix (Tensor3 &M, const ArrayOfRational &Ji, const ArrayOfRational &Jf, const ArrayOfRational &l2i, const ArrayOfRational &l2f, [[maybe_unused]] const Vector &F0, const Vector &d, const Vector &rho, const Numeric &T, const Vector &a=Vector(params, 1))
 
Matrix CO2_ir_training (const ArrayOfRational &Ji, const ArrayOfRational &Jf, const ArrayOfRational &l2i, const ArrayOfRational &l2f, const Vector &F0, const Vector &d, const Vector &rho, const Vector &gamma, const Numeric &T)
 CO2 IR training algorithm for linearization. More...
 
Numeric o2_66_inelastic_cross_section_makarov (int L, Numeric T)
 
Numeric o2_66_adiabatic_factor_makarov (int L, Numeric T, Numeric collider_mass)
 
SecondOrderLineMixingCoeffs compute_2nd_order_lm_coeff (ConstVectorView y, ConstVectorView x, const Numeric exp, const Numeric x0)
 Fit to a second order line mixing formula the input. More...
 
ComplexVector equivalent_linestrengths (const Vector &population, const Vector &dipole, const Eigen::ComplexEigenSolver< Eigen::MatrixXcd > &M)
 Equivalent line strengths. More...
 
Numeric total_linestrengths (const Vector &population, const Vector &dipole)
 Sum of line strengths. More...
 
void relmatInAir (Matrix &relmat, const AbsorptionLines &band, const SpeciesAuxData &partition_functions, const Index &wigner_initialized, const Numeric &temperature)
 Compute the relaxation matrix in air mixture. More...
 

Variables

constexpr auto params = 10
 

Detailed Description

Line mixing calculation implementation.

Author
Richard Larsson
Date
2018-08-06

This file contains only experimental code to test the F90-routines. It might evolve to replace it at some point but that is beyond present ability

Definition in file linemixing.cc.

Enumeration Type Documentation

◆ Species

enum Species
strong
Enumerator
CO2 
O2_66 

Definition at line 97 of file linemixing.cc.

Function Documentation

◆ adiabatic_factor()

AdiabaticFactor adiabatic_factor ( const SpeciesTag main,
const SpeciesTag collider 
)
inline

Definition at line 60 of file linemixing.cc.

References AdiabaticFactor::Hartmann, and SpeciesTag::IsSpecies().

Referenced by relaxation_matrix_calculations().

◆ basis_rate()

BasisRate basis_rate ( const SpeciesTag main,
const SpeciesTag collider,
const Numeric T,
const Numeric T0 
)
inline

◆ CO2_ir_training()

Matrix CO2_ir_training ( const ArrayOfRational Ji,
const ArrayOfRational Jf,
const ArrayOfRational l2i,
const ArrayOfRational l2f,
const Vector F0,
const Vector d,
const Vector rho,
const Vector gamma,
const Numeric T 
)

CO2 IR training algorithm for linearization.

Parameters
[in]JiJ init for all lines
[in]JfJ final for all lines
[in]l2il2 init for all lines
[in]l2fl2 final for all lines
[in]F0Central frequency
[in]dDipole for each line
[in]rhoThe population density for each line
[in]gammaPressure broadening for each line
[in]TTemperature
Returns
Matrix Relaxation Matrix

Definition at line 665 of file linemixing.cc.

References i, joker, linearized_relaxation_matrix(), lsf(), M, n, Array< base >::nelem(), and params.

◆ compute_2nd_order_lm_coeff()

SecondOrderLineMixingCoeffs compute_2nd_order_lm_coeff ( ConstVectorView  y,
ConstVectorView  x,
const Numeric  exp,
const Numeric  x0 
)

Fit to a second order line mixing formula the input.

Finds best fit [c0, c1] of y(x) = (c0 + c1 * (x0 / x - 1.)) * pow(x0 / x, exp)

Parameters
[in]yY-axis
[in]xX-axis
[in]expExponent
[in]x0Zero-value of x0
Returns
SecondOrderLineMixingCoeffs

Definition at line 835 of file linemixing.cc.

References i, n, and ConstVectorView::nelem().

◆ dipole_vector()

Vector dipole_vector ( const AbsorptionLines abs_lines,
const SpeciesAuxData partition_functions 
)

Dipole vector.

Parameters
[in]abs_linesOne band of lines
[in]partition_functionsMethod to compute the partition function
Returns
Vector Dipole for each line

Definition at line 371 of file linemixing.cc.

References n, Absorption::Lines::NumLines(), population_density_vector(), and Absorption::Lines::T0().

Referenced by abs_lines_per_speciesSetLineMixingFromRelmat(), abs_xsec_per_speciesAddLineMixedLines(), abs_xsec_per_speciesAddLineMixedLinesInAir(), and hartmann_ecs_interface().

◆ dpopulation_densitydT()

Numeric dpopulation_densitydT ( Numeric  T,
Numeric  E0,
Numeric  F0,
Numeric  QT,
Numeric  dQTdT 
)
inline

◆ equivalent_linestrengths()

ComplexVector equivalent_linestrengths ( const Vector population,
const Vector dipole,
const Eigen::ComplexEigenSolver< Eigen::MatrixXcd > &  M 
)

Equivalent line strengths.

Parameters
[in]populationThe population density for each line
[in]dipoleDipole for each line
[in]MSolver
Returns
ComplexVector Equivalent line strengths of each line

Definition at line 884 of file linemixing.cc.

References Molecule::O2_66::B, i, n, and ConstVectorView::nelem().

Referenced by abs_xsec_per_speciesAddLineMixedLines(), and abs_xsec_per_speciesAddLineMixedLinesInAir().

◆ getB0()

Numeric getB0 ( const SpeciesTag main)
inline

◆ hartmann_ecs_interface()

Matrix hartmann_ecs_interface ( const AbsorptionLines abs_lines,
const ArrayOfSpeciesTag collider_species,
const Vector collider_species_vmr,
const SpeciesAuxData partition_functions,
const Numeric T,
const Index size 
)

Energy corrected sudden relaxation matrix using Hartmann's method.

Parameters
[in]abs_linesOne band of lines
[in]collider_speciesSpecies tag of collider
[in]collider_species_vmrVMR of collider
[in]partition_functionsMethod to compute the partition function
[in]TTemperature
[in]sizeNumber of elements
Returns
Relaxation Matrix

Definition at line 501 of file linemixing.cc.

References dipole_vector(), hartmann_relaxation_matrix(), and population_density_vector().

Referenced by relmatInAir().

◆ hartmann_relaxation_matrix()

Matrix hartmann_relaxation_matrix ( const AbsorptionLines band,
const Vector population,
const Vector d0,
const ArrayOfSpeciesTag colliders,
const Vector colliders_vmr,
const SpeciesAuxData partition_functions,
const Numeric T,
const Index size 
)
inline

Definition at line 286 of file linemixing.cc.

References n, and Absorption::Lines::NumLines().

Referenced by hartmann_ecs_interface().

◆ linearized_relaxation_matrix()

void linearized_relaxation_matrix ( Tensor3 M,
const ArrayOfRational Ji,
const ArrayOfRational Jf,
const ArrayOfRational l2i,
const ArrayOfRational l2f,
[[maybe_unused] ] const Vector F0,
const Vector d,
const Vector rho,
const Numeric T,
const Vector a = Vector(params, 1) 
)

Definition at line 589 of file linemixing.cc.

References n, and Array< base >::nelem().

Referenced by CO2_ir_training().

◆ normalize_relaxation_matrix()

◆ o2_66_adiabatic_factor_makarov()

Numeric o2_66_adiabatic_factor_makarov ( int  L,
Numeric  T,
Numeric  collider_mass 
)

Definition at line 721 of file linemixing.cc.

Referenced by OffDiagonalElement::O2_66_MW().

◆ o2_66_inelastic_cross_section_makarov()

Numeric o2_66_inelastic_cross_section_makarov ( int  L,
Numeric  T 
)

Definition at line 710 of file linemixing.cc.

Referenced by OffDiagonalElement::O2_66_MW().

◆ population_density()

Numeric population_density ( Numeric  T,
Numeric  E0,
Numeric  F0,
Numeric  QT 
)
inline

Definition at line 326 of file linemixing.cc.

References boltzman_factor(), and stimulated_emission().

◆ population_density_vector()

Vector population_density_vector ( const AbsorptionLines abs_lines,
const SpeciesAuxData partition_functions,
const Numeric T 
)

Compute the population density.

Parameters
[in]abs_linesOne band of lines
[in]partition_functionsMethod to compute the partition function
[in]TTemperature
Returns
Vector The population density for each line

Definition at line 342 of file linemixing.cc.

References SpeciesAuxData::getParam(), SpeciesAuxData::getParamType(), n, Absorption::Lines::NumLines(), Absorption::Lines::QuantumIdentity(), and single_partition_function().

Referenced by abs_xsec_per_speciesAddLineMixedLines(), abs_xsec_per_speciesAddLineMixedLinesInAir(), dipole_vector(), and hartmann_ecs_interface().

◆ reduced_dipole_vector()

Vector reduced_dipole_vector ( const AbsorptionLines band,
const RedPoleType  type 
)

Reduced dipole vector.

Computes the dipole moment

Parameters
abs_linesall absorption lines of the band
Returns
dipole moment of the absorption lines

Definition at line 401 of file linemixing.cc.

References ElectricRoVibDipole, i, J, l2, Absorption::Lines::LowerQuantumNumber(), MagneticQuadrapole, N, n, Absorption::Lines::NumLines(), Absorption::reduced_magnetic_quadrapole(), Absorption::reduced_rovibrational_dipole(), and Absorption::Lines::UpperQuantumNumber().

Referenced by normalize_relaxation_matrix().

◆ relaxation_matrix_calculations()

◆ relmatInAir()

void relmatInAir ( Matrix relmat,
const AbsorptionLines abs_lines,
const SpeciesAuxData partition_functions,
const Index wigner_initialized,
const Numeric temperature 
)

Compute the relaxation matrix in air mixture.

Parameters
[out]relmatRelaxation matrix
[in]abs_linesAbsorption band
[in]partition_functionsPartition functions
[in]wigner_initializedIndication of the Wigner state
[in]temperatureAtmospheric temperature

Definition at line 915 of file linemixing.cc.

References Absorption::Lines::BroadeningSpecies(), Absorption::ByRelmatHartmannLTE, hartmann_ecs_interface(), SpeciesTag::Isotopologue(), Absorption::Lines::Isotopologue(), Array< base >::nelem(), Absorption::Lines::Population(), SpeciesTag::Species(), and Absorption::Lines::Species().

Referenced by abs_xsec_per_speciesAddLineMixedLinesInAir().

◆ rosenkranz_first_order()

Vector rosenkranz_first_order ( const AbsorptionLines abs_lines,
const Matrix W,
const Vector d0 
)

Computes Y for Rosenkranz's line mixing coefficients.

Parameters
[in]abs_linesOne band of lines
[in]WRelaxation Matrix
[in]d0Dipole vector
Returns
Vector Y for each line

Definition at line 431 of file linemixing.cc.

References Absorption::Lines::F0(), i, n, and Absorption::Lines::NumLines().

Referenced by abs_lines_per_speciesSetLineMixingFromRelmat().

◆ rosenkranz_scaling_second_order()

Vector rosenkranz_scaling_second_order ( const AbsorptionLines abs_lines,
const Matrix W,
const Vector d0 
)

Computes G for Rosenkranz's line mixing coefficients.

Parameters
[in]abs_linesOne band of lines
[in]WRelaxation Matrix
[in]d0Dipole vector
Returns
Vector G for each line

Definition at line 466 of file linemixing.cc.

References Absorption::Lines::F0(), i, n, Absorption::Lines::NumLines(), Constant::pow2(), and r.

Referenced by abs_lines_per_speciesSetLineMixingFromRelmat().

◆ rosenkranz_shifting_second_order()

Vector rosenkranz_shifting_second_order ( const AbsorptionLines abs_lines,
const Matrix W 
)

Computes DV for Rosenkranz's line mixing coefficients.

Parameters
[in]abs_linesOne band of lines
[in]WRelaxation Matrix
Returns
Vector DV for each line

Definition at line 449 of file linemixing.cc.

References Absorption::Lines::F0(), i, n, and Absorption::Lines::NumLines().

Referenced by abs_lines_per_speciesSetLineMixingFromRelmat().

◆ total_linestrengths()

Numeric total_linestrengths ( const Vector population,
const Vector dipole 
)

Sum of line strengths.

Parameters
[in]populationThe population density for each line
[in]dipoleDipole for each line
Returns
Numeric The sum

Definition at line 906 of file linemixing.cc.

References i, n, and ConstVectorView::nelem().

Variable Documentation

◆ params

constexpr auto params = 10

Definition at line 587 of file linemixing.cc.

Referenced by CO2_ir_training().