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;
530 Eigen::Matrix<Complex, Eigen::Dynamic, Linefunctions::ExpectedDataSize()>
data;
531 Eigen::Matrix<Complex, 1, Linefunctions::ExpectedDataSize()>
datac;
550 dF.setZero(dF.rows(), dF.cols());
551 dN.setZero(dN.rows(), dN.cols());
596 const bool no_negatives=
false,
597 const bool zeeman=
false,
601 #endif //linefunctions_h Eigen::Matrix< Complex, 1, Eigen::Dynamic > dNc
INDEX Index
The type to use for all integer numbers and indices.
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.
Computations and data for a single absorption line.
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.
InternalData(Index nf, Index nj)
Eigen::Matrix< Complex, 1, 1 > Fc
A class implementing complex numbers for ARTS.
MirroringType
Describes the type of mirroring line effects.
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.
NormalizationType
Describes the type of normalization line effects.
G0 G2 FVC Y DV Numeric E0
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.
Routines for setting up the jacobian.
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.
Numeric lte_linestrength(Numeric S0, Numeric E0, Numeric F0, Numeric QT0, Numeric T0, Numeric QT, Numeric T)
Gets the local thermodynamic equilibrium line strength.
constexpr Index ExpectedDataSize()
Size required for data buffer.
Array< RetrievalQuantity > ArrayOfRetrievalQuantity
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.
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.
Contains the absorption namespace.
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.
G0 G2 FVC Y DV Numeric Numeric Numeric Zeeman LowerQuantumNumbers void * data
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.
Array< Index > ArrayOfIndex
An array of Index.
Eigen::Matrix< Complex, 1, Eigen::Dynamic > dFc
std::complex< Numeric > Complex
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.
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.
Line functions related to line shapes and line strength.
NUMERIC Numeric
The type to use for all floating point numbers.
Numeric dDopplerConstant_dT(const Numeric &T, const Numeric &dc)
Returns the temperature derivative of the frequency-independent part of the Doppler broadening...
Eigen::Matrix< Complex, 1, Linefunctions::ExpectedDataSize()> datac
Class to map energy levels.
This can be used to make arrays out of anything.
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.
Eigen::Matrix< Complex, Eigen::Dynamic, Linefunctions::ExpectedDataSize()> data
Polarization
Zeeman polarization selection.
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.
Absorption::Lines AbsorptionLines
A constant view of a Vector.
Numeric DopplerConstant(Numeric T, Numeric mass)
Returns the frequency-independent part of the Doppler broadening.
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 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.
Eigen::Matrix< Complex, 1, 1 > Nc
invlib::Matrix< ArtsMatrix > Matrix
invlib wrapper type for ARTS matrices.
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.