ARTS
2.3.1285(git:92a29ea9-dirty)
|
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 |
Line mixing calculation implementation.
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.
|
strong |
Enumerator | |
---|---|
CO2 | |
O2_66 |
Definition at line 97 of file linemixing.cc.
|
inline |
Definition at line 60 of file linemixing.cc.
References AdiabaticFactor::Hartmann, and SpeciesTag::IsSpecies().
Referenced by relaxation_matrix_calculations().
|
inline |
Definition at line 74 of file linemixing.cc.
References BasisRate::Hartmann, Conversion::hitran2arts_broadening(), SpeciesTag::IsSpecies(), and pow().
Referenced by relaxation_matrix_calculations().
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.
[in] | Ji | J init for all lines |
[in] | Jf | J final for all lines |
[in] | l2i | l2 init for all lines |
[in] | l2f | l2 final for all lines |
[in] | F0 | Central frequency |
[in] | d | Dipole for each line |
[in] | rho | The population density for each line |
[in] | gamma | Pressure broadening for each line |
[in] | T | Temperature |
Definition at line 665 of file linemixing.cc.
References i, joker, linearized_relaxation_matrix(), lsf(), M, n, Array< base >::nelem(), and params.
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)
[in] | y | Y-axis |
[in] | x | X-axis |
[in] | exp | Exponent |
[in] | x0 | Zero-value of x0 |
Definition at line 835 of file linemixing.cc.
References i, n, and ConstVectorView::nelem().
Vector dipole_vector | ( | const AbsorptionLines & | abs_lines, |
const SpeciesAuxData & | partition_functions | ||
) |
Dipole vector.
[in] | abs_lines | One band of lines |
[in] | partition_functions | Method to compute the partition function |
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().
|
inline |
Definition at line 333 of file linemixing.cc.
References boltzman_factor(), dboltzman_factordT(), dstimulated_emissiondT(), Constant::pow2(), and stimulated_emission().
ComplexVector equivalent_linestrengths | ( | const Vector & | population, |
const Vector & | dipole, | ||
const Eigen::ComplexEigenSolver< Eigen::MatrixXcd > & | M | ||
) |
Equivalent line strengths.
[in] | population | The population density for each line |
[in] | dipole | Dipole for each line |
[in] | M | Solver |
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().
|
inline |
Definition at line 39 of file linemixing.cc.
References SpeciesTag::IsIsotopologue(), SpeciesTag::IsSpecies(), and Conversion::kaycm2freq().
Referenced by relaxation_matrix_calculations().
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.
[in] | abs_lines | One band of lines |
[in] | collider_species | Species tag of collider |
[in] | collider_species_vmr | VMR of collider |
[in] | partition_functions | Method to compute the partition function |
[in] | T | Temperature |
[in] | size | Number of elements |
Definition at line 501 of file linemixing.cc.
References dipole_vector(), hartmann_relaxation_matrix(), and population_density_vector().
Referenced by relmatInAir().
|
inline |
Definition at line 286 of file linemixing.cc.
References n, and Absorption::Lines::NumLines().
Referenced by hartmann_ecs_interface().
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().
void normalize_relaxation_matrix | ( | Matrix & | W, |
const Vector & | population, | ||
const Vector & | , | ||
const AbsorptionLines & | band, | ||
const SpeciesAuxData & | partition_functions, | ||
const Numeric & | T | ||
) |
Definition at line 200 of file linemixing.cc.
References abs, Absorption::Lines::E0(), ElectricRoVibDipole, Absorption::Lines::F0(), get_sorted_indexes(), SpeciesAuxData::getParam(), SpeciesAuxData::getParamType(), i, Absorption::Lines::I0(), Linefunctions::lte_linestrength(), n, Absorption::Lines::NumLines(), Absorption::Lines::QuantumIdentity(), r, reduced_dipole_vector(), single_partition_function(), swap(), and Absorption::Lines::T0().
Definition at line 721 of file linemixing.cc.
Referenced by OffDiagonalElement::O2_66_MW().
Definition at line 710 of file linemixing.cc.
Referenced by OffDiagonalElement::O2_66_MW().
Definition at line 326 of file linemixing.cc.
References boltzman_factor(), and stimulated_emission().
Vector population_density_vector | ( | const AbsorptionLines & | abs_lines, |
const SpeciesAuxData & | partition_functions, | ||
const Numeric & | T | ||
) |
Compute the population density.
[in] | abs_lines | One band of lines |
[in] | partition_functions | Method to compute the partition function |
[in] | T | Temperature |
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().
Vector reduced_dipole_vector | ( | const AbsorptionLines & | band, |
const RedPoleType | type | ||
) |
Reduced dipole vector.
Computes the dipole moment
abs_lines | all absorption lines of the band |
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().
Matrix relaxation_matrix_calculations | ( | const AbsorptionLines & | band, |
const Vector & | population, | ||
const SpeciesTag & | collider, | ||
const Numeric & | collider_vmr, | ||
const Numeric & | T, | ||
const Index & | size | ||
) |
Definition at line 99 of file linemixing.cc.
References adiabatic_factor(), basis_rate(), Absorption::Lines::Bath(), Absorption::Lines::BroadeningSpecies(), CO2, OffDiagonalElement::CO2_IR(), getB0(), i, OffDiagonalElementOutput::ij, J, OffDiagonalElementOutput::ji, l2, Absorption::Lines::LineShapeType(), Absorption::Lines::LowerQuantumNumber(), main(), N, n, Absorption::Lines::NumLines(), O2_66, OffDiagonalElement::O2_66_MW(), Absorption::Lines::QuantumIdentity(), Absorption::Lines::Self(), Absorption::Lines::ShapeParameters(), SpeciesTag::SpeciesMass(), Absorption::Lines::SpeciesName(), Absorption::Lines::T0(), Absorption::Lines::UpperQuantumNumber(), and LineShape::vmrs().
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.
[out] | relmat | Relaxation matrix |
[in] | abs_lines | Absorption band |
[in] | partition_functions | Partition functions |
[in] | wigner_initialized | Indication of the Wigner state |
[in] | temperature | Atmospheric 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().
Vector rosenkranz_first_order | ( | const AbsorptionLines & | abs_lines, |
const Matrix & | W, | ||
const Vector & | d0 | ||
) |
Computes Y for Rosenkranz's line mixing coefficients.
[in] | abs_lines | One band of lines |
[in] | W | Relaxation Matrix |
[in] | d0 | Dipole vector |
Definition at line 431 of file linemixing.cc.
References Absorption::Lines::F0(), i, n, and Absorption::Lines::NumLines().
Referenced by abs_lines_per_speciesSetLineMixingFromRelmat().
Vector rosenkranz_scaling_second_order | ( | const AbsorptionLines & | abs_lines, |
const Matrix & | W, | ||
const Vector & | d0 | ||
) |
Computes G for Rosenkranz's line mixing coefficients.
[in] | abs_lines | One band of lines |
[in] | W | Relaxation Matrix |
[in] | d0 | Dipole vector |
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().
Vector rosenkranz_shifting_second_order | ( | const AbsorptionLines & | abs_lines, |
const Matrix & | W | ||
) |
Computes DV for Rosenkranz's line mixing coefficients.
[in] | abs_lines | One band of lines |
[in] | W | Relaxation Matrix |
Definition at line 449 of file linemixing.cc.
References Absorption::Lines::F0(), i, n, and Absorption::Lines::NumLines().
Referenced by abs_lines_per_speciesSetLineMixingFromRelmat().
Sum of line strengths.
[in] | population | The population density for each line |
[in] | dipole | Dipole for each line |
Definition at line 906 of file linemixing.cc.
References i, n, and ConstVectorView::nelem().
constexpr auto params = 10 |
Definition at line 587 of file linemixing.cc.
Referenced by CO2_ir_training().