Go to the documentation of this file.
30 #ifndef linefunctions_h
31 #define linefunctions_h
60 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
64 const Numeric& magnetic_magnitude,
65 const Numeric& doppler_constant,
89 Eigen::Ref<Eigen::VectorXcd> F,
90 Eigen::Ref<Eigen::MatrixXcd> dF,
92 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
94 const Numeric& magnetic_magnitude,
98 const Index& line_ind=0,
127 void set_htp(Eigen::Ref<Eigen::VectorXcd> F,
128 Eigen::Ref<Eigen::MatrixXcd> dF,
129 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
131 const Numeric& magnetic_magnitude,
136 const Index& line_ind=0,
140 const Numeric& dGD_div_F0_dT = 0.0,
164 Eigen::Ref<Eigen::VectorXcd> F,
165 Eigen::Ref<Eigen::MatrixXcd> dF,
167 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
169 const Numeric& magnetic_magnitude,
174 const Index& line_ind=0,
178 const Numeric& dGD_div_F0_dT = 0.0,
199 Eigen::Ref<Eigen::VectorXcd> F,
200 Eigen::Ref<Eigen::MatrixXcd> dF,
202 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
204 const Numeric& magnetic_magnitude,
208 const Index& line_ind=0,
212 const Numeric& dGD_div_F0_dT = 0.0);
238 Eigen::Ref<Eigen::VectorXcd> F,
239 Eigen::Ref<Eigen::MatrixXcd> dF,
240 const Eigen::Ref<Eigen::VectorXcd> Fm,
241 const Eigen::Ref<Eigen::MatrixXcd> dFm,
243 const bool with_mirroring,
245 const Index& line_ind=0,
265 Eigen::Ref<Eigen::VectorXcd> F,
266 Eigen::Ref<Eigen::MatrixXcd> dF,
267 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
271 const Index& line_ind=0,
290 Eigen::Ref<Eigen::VectorXcd> F,
291 Eigen::Ref<Eigen::MatrixXcd> dF,
293 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
297 const Index& line_ind=0,
314 Eigen::Ref<Eigen::VectorXcd> F,
315 Eigen::Ref<Eigen::MatrixXcd> dF,
316 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
319 const Index& line_ind=0,
363 Eigen::Ref<Eigen::VectorXcd> F,
364 Eigen::Ref<Eigen::MatrixXcd> dF,
365 Eigen::Ref<Eigen::VectorXcd>
N,
366 Eigen::Ref<Eigen::MatrixXcd> dN,
374 const Index& line_ind=0,
403 Eigen::Ref<Eigen::VectorXcd> F,
404 Eigen::Ref<Eigen::MatrixXcd> dF,
405 Eigen::Ref<Eigen::VectorXcd>
N,
406 Eigen::Ref<Eigen::MatrixXcd> dN,
418 const Index& line_ind=0,
436 Eigen::Ref<Eigen::MatrixXcd> dF,
438 const Index& line_ind,
473 const Eigen::Ref<const Eigen::VectorXd>
f_grid,
501 Eigen::Ref<Eigen::VectorXcd> F,
502 Eigen::Ref<Eigen::MatrixXcd> dF,
503 Eigen::Ref<Eigen::VectorXcd>
N,
504 Eigen::Ref<Eigen::MatrixXcd> dN,
513 const Index& line_ind=0,
525 Eigen::Matrix<Complex, 1, 1>
Fc;
526 Eigen::Matrix<Complex, 1, 1>
Nc;
527 Eigen::Matrix<Complex, 1, Eigen::Dynamic>
dFc;
528 Eigen::Matrix<Complex, 1, Eigen::Dynamic>
dNc;
550 dF.setZero(
dF.rows(),
dF.cols());
551 dN.setZero(
dN.rows(),
dN.cols());
579 InternalData& scratch,
596 const bool no_negatives=
false,
597 const bool zeeman=
false,
601 #endif //linefunctions_h
Class to map energy levels.
Eigen::Matrix< Complex, 1, Linefunctions::ExpectedDataSize()> datac
void apply_rosenkranz_quadratic_scaling(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Numeric &F0, const Numeric &T, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex())
Applies Rosenkranz quadratic normalization to already set line shape.
void apply_VVH_scaling(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, Eigen::Ref< Eigen::Matrix< Complex, Eigen::Dynamic, ExpectedDataSize()>> data, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Numeric &F0, const Numeric &T, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex())
Applies Van Vleck and Huber normalization to already set line shape.
void apply_linemixing_scaling_and_mirroring(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, const Eigen::Ref< Eigen::VectorXcd > Fm, const Eigen::Ref< Eigen::MatrixXcd > dFm, const LineShape::Output &lso, const bool with_mirroring, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex(), const LineShape::Output &dT={0, 0, 0, 0, 0, 0, 0, 0, 0}, const LineShape::Output &dVMR={0, 0, 0, 0, 0, 0, 0, 0, 0})
Applies line mixing scaling to already set lineshape and line mirror.
void set_cross_section_of_band(InternalData &scratch, InternalData &sum, const ConstVectorView f_grid, const AbsorptionLines &band, const ArrayOfRetrievalQuantity &derivatives_data, const ArrayOfIndex &derivatives_data_active, const Vector &vmrs, const EnergyLevelMap &nlte, const Numeric &P, const Numeric &T, const Numeric &isot_ratio, const Numeric &H, const Numeric &DC, const Numeric &dDCdT, const Numeric &QT, const Numeric &dQTdT, const Numeric &QT0, const bool no_negatives=false, const bool zeeman=false, const Zeeman::Polarization zeeman_polarization=Zeeman::Polarization::Pi)
Computes the cross-section of an absorption band.
invlib::Matrix< ArtsMatrix > Matrix
invlib wrapper type for ARTS matrices.
Contains the absorption namespace.
constexpr Index ExpectedDataSize()
Size required for data buffer.
NormalizationType
Describes the type of normalization line effects.
InternalData(Index nf, Index nj)
Numeric lte_linestrength(Numeric S0, Numeric E0, Numeric F0, Numeric QT0, Numeric T0, Numeric QT, Numeric T)
Gets the local thermodynamic equilibrium line strength.
Eigen::Matrix< Complex, 1, 1 > Fc
Eigen::Matrix< Complex, 1, Eigen::Dynamic > dNc
G0 G2 FVC Y DV Numeric Numeric Numeric Zeeman LowerQuantumNumbers void * data
void apply_lineshapemodel_jacobian_scaling(Eigen::Ref< Eigen::MatrixXcd > dF, const AbsorptionLines &band, const Index &line_ind, const ArrayOfRetrievalQuantity &derivatives_data, const ArrayOfIndex &derivatives_data_position, const Numeric &T, const Numeric &P, const Vector &vmrs)
Applies the line-by-line pressure broadening jacobian for the matching lines.
Array< RetrievalQuantity > ArrayOfRetrievalQuantity
void set_doppler(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, Eigen::Ref< Eigen::Matrix< Complex, Eigen::Dynamic, ExpectedDataSize()>> data, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Numeric &zeeman_df, const Numeric &magnetic_magnitude, const Numeric &F0_noshift, const Numeric &GD_div_F0, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex(), const Numeric &dGD_div_F0_dT=0.0)
Sets the Doppler line shape.
Computations and data for a single absorption line.
std::complex< Numeric > Complex
void apply_VVW_scaling(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Numeric &F0, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex())
Applies Van Vleck and Weiskopf normalization to already set line shape.
void set_voigt(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, Eigen::Ref< Eigen::Matrix< Complex, Eigen::Dynamic, ExpectedDataSize()>> data, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Numeric &zeeman_df, const Numeric &magnetic_magnitude, const Numeric &F0_noshift, const Numeric &GD_div_F0, const LineShape::Output &lso, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex(), const Numeric &dGD_div_F0_dT=0.0, const LineShape::Output &dT={0, 0, 0, 0, 0, 0, 0, 0, 0}, const LineShape::Output &dVMR={0, 0, 0, 0, 0, 0, 0, 0, 0})
Sets the Voigt line shape.
A class implementing complex numbers for ARTS.
This can be used to make arrays out of anything.
Absorption::Lines AbsorptionLines
Eigen::Matrix< Complex, 1, Eigen::Dynamic > dFc
void apply_linestrength_scaling_by_lte(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, Eigen::Ref< Eigen::VectorXcd > N, Eigen::Ref< Eigen::MatrixXcd > dN, const Absorption::SingleLine &line, const Numeric &T, const Numeric &T0, const Numeric &isotopic_ratio, const Numeric &QT, const Numeric &QT0, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex(), const Numeric &dQT_dT=0.0)
Applies linestrength to already set line shape by LTE population type.
Array< Index > ArrayOfIndex
An array of Index.
Routines for setting up the jacobian.
NUMERIC Numeric
The type to use for all floating point numbers.
Eigen::Matrix< Complex, 1, 1 > Nc
void set_htp(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Numeric &zeeman_df, const Numeric &magnetic_magnitude, const Numeric &F0_noshift, const Numeric &GD_div_F0, const LineShape::Output &lso, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex(), const Numeric &dGD_div_F0_dT=0.0, const LineShape::Output &dT={0, 0, 0, 0, 0, 0, 0, 0, 0}, const LineShape::Output &dVMR={0, 0, 0, 0, 0, 0, 0, 0, 0})
Sets the HTP line shape.
Numeric dDopplerConstant_dT(const Numeric &T, const Numeric &dc)
Returns the temperature derivative of the frequency-independent part of the Doppler broadening.
MirroringType
Describes the type of mirroring line effects.
Vector f_grid(Workspace &ws) noexcept
Type
Type of line shape to compute.
Numeric DopplerConstant(Numeric T, Numeric mass)
Returns the frequency-independent part of the Doppler broadening.
void find_cutoff_ranges(Index &start_cutoff, Index &nelem_cutoff, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Numeric &fmin, const Numeric &fmax)
Sets cutoff frequency indices.
void apply_linestrength_scaling_by_vibrational_nlte(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, Eigen::Ref< Eigen::VectorXcd > N, Eigen::Ref< Eigen::MatrixXcd > dN, const Absorption::SingleLine &line, const Numeric &T, const Numeric &T0, const Numeric &Tu, const Numeric &Tl, const Numeric &Evu, const Numeric &Evl, const Numeric &isotopic_ratio, const Numeric &QT, const Numeric &QT0, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex(), const Numeric &dQT_dT=0.0)
Applies linestrength to already set line shape by vibrational level temperatures.
void set_lineshape(Eigen::Ref< Eigen::VectorXcd > F, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Absorption::SingleLine &line, const Numeric &temperature, const Numeric &zeeman_df, const Numeric &magnetic_magnitude, const Numeric &doppler_constant, const LineShape::Output &lso, const LineShape::Type lineshape_type, const Absorption::MirroringType mirroring_type, const Absorption::NormalizationType norm_type)
Sets the lineshape normalized to unity.
Line functions related to line shapes and line strength.
INDEX Index
The type to use for all integer numbers and indices.
void apply_linestrength_from_nlte_level_distributions(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, Eigen::Ref< Eigen::VectorXcd > N, Eigen::Ref< Eigen::MatrixXcd > dN, const Numeric &r1, const Numeric &r2, const Numeric &g1, const Numeric &g2, const Numeric &A21, const Numeric &F0, const Numeric &T, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex())
Applies non-lte linestrength to already set line shape.
void set_lorentz(Eigen::Ref< Eigen::VectorXcd > F, Eigen::Ref< Eigen::MatrixXcd > dF, Eigen::Ref< Eigen::Matrix< Complex, Eigen::Dynamic, ExpectedDataSize()>> data, const Eigen::Ref< const Eigen::VectorXd > f_grid, const Numeric &zeeman_df, const Numeric &magnetic_magnitude, const Numeric &F0_noshift, const LineShape::Output &lso, const AbsorptionLines &band=AbsorptionLines(), const Index &line_ind=0, const ArrayOfRetrievalQuantity &derivatives_data=ArrayOfRetrievalQuantity(), const ArrayOfIndex &derivatives_data_position=ArrayOfIndex(), const LineShape::Output &dT={0, 0, 0, 0, 0, 0, 0, 0, 0}, const LineShape::Output &dVMR={0, 0, 0, 0, 0, 0, 0, 0, 0})
Sets the Lorentz line shape.
A constant view of a Vector.
Polarization
Zeeman polarization selection.
Eigen::Matrix< Complex, Eigen::Dynamic, Linefunctions::ExpectedDataSize()> data
G0 G2 FVC Y DV Numeric E0
Vector vmrs(const ConstVectorView &atmospheric_vmrs, const ArrayOfArrayOfSpeciesTag &atmospheric_species, const QuantumIdentifier &self, const ArrayOfSpeciesTag &lineshape_species, bool self_in_list, bool bath_in_list, Type type)
Returns a VMR vector for this model's main calculations.