136 return (
end(Ju, Jl, type) -
start(Ju, Jl, type)).toIndex() + 1;
156 return start(Ju, Jl, type) +
n;
177 return Mu(Ju, Jl, type,
n) +
dM(type);
255 auto JJ =
J * (
J + 1);
256 auto NN =
N * (
N + 1);
257 auto SS =
S * (
S + 1);
262 else if (NN not_eq 0) {
263 auto T1 = ((JJ + SS - NN) / JJ / 2).toNumeric();
264 auto T2 = ((JJ - SS + NN) * LL / NN / JJ / 2).toNumeric();
265 return GS * T1 + GL * T2;
267 auto T1 = ((JJ + SS - NN) / JJ / 2).toNumeric();
292 auto JJ =
J * (
J + 1);
297 auto DIV =
Omega / JJ;
298 auto T1 = (Sigma * DIV).toNumeric();
299 auto T2 = (
Lambda * DIV).toNumeric();
300 return GS * T1 + GL * T2;
331 qns[QuantumNumberType::J],
332 qns[QuantumNumberType::Lambda],
333 qns[QuantumNumberType::S],
380 return std::isnan(mdata.
gu) and std::isnan(mdata.
gl);
417 auto ml =
Ml(Ju, Jl, type, n);
418 auto mu =
Mu(Ju, Jl, type, n);
438 using Constant::bohr_magneton;
440 constexpr
Numeric C = bohr_magneton / h;
447 friend inline std::ostream&
operator<<(std::ostream& os,
const Model& m);
523 : att(a, b, c, d), dis(u, v,
w){};
526 const Eigen::RowVector4d&
attenuation() const noexcept {
return att; }
529 const Eigen::RowVector3d&
dispersion() const noexcept {
return dis; }
541 Eigen::Matrix4d
matrix() const noexcept {
542 return (Eigen::Matrix4d() << att[0],
580 const Numeric ST = std::sin(theta), CT = std::cos(theta), ST2 = ST * ST,
581 CT2 = CT * CT, ST2C2E = ST2 * std::cos(2 * eta),
582 ST2S2E = ST2 * std::sin(2 * eta);
586 1 + CT2, ST2C2E, ST2S2E, 2 * CT, 4 * CT, 2 * ST2S2E, -2 * ST2C2E);
590 1 + CT2, ST2C2E, ST2S2E, -2 * CT, -4 * CT, 2 * ST2S2E, -2 * ST2C2E);
603 const Numeric ST = std::sin(theta), CT = std::cos(theta),
604 C2E = std::cos(2 * eta), S2E = std::sin(2 * eta), dST = CT,
605 dST2 = 2 * ST * dST, dCT = -ST, dST2C2E = dST2 * C2E,
606 dST2S2E = dST2 * S2E, dCT2 = 2 * CT * dCT;
610 dCT2, dST2C2E, dST2S2E, 2 * dCT, 4 * dCT, 2 * dST2S2E, -2 * dST2C2E);
612 dST2, -dST2C2E, -dST2S2E, 0, 0, -2 * dST2S2E, 2 * dST2C2E);
614 dCT2, dST2C2E, dST2S2E, -2 * dCT, -4 * dCT, 2 * dST2S2E, -2 * dST2C2E);
627 const Numeric ST = std::sin(theta), ST2 = ST * ST, C2E = std::cos(2 * eta),
628 S2E = std::sin(2 * eta), dST2C2E = -2 * ST2 * S2E,
629 dST2S2E = 2 * ST2 * C2E;
635 0, -dST2C2E, -dST2S2E, 0, 0, -2 * dST2S2E, 2 * dST2C2E);
668 Numeric H,
theta, eta, dH_du, dH_dv, dH_dw, dtheta_du, dtheta_dv, dtheta_dw,
669 deta_du, deta_dv, deta_dw;
715 return {H, theta, eta, 0, 0, 0, 0, 0, 0, 0, 0, 0};
INDEX Index
The type to use for all integer numbers and indices.
Numeric Strength(Rational Ju, Rational Jl, Polarization type, Index n) const
Gives the strength of one subline of a given polarization.
constexpr Numeric Splitting(Rational Ju, Rational Jl, Polarization type, Index n) const noexcept
Gives the splitting of one subline of a given polarization.
constexpr bool GoodHundData(const QuantumNumbers &qns) noexcept
Checks if the quantum numbers are good for this transition.
const Eigen::RowVector4d & attenuation() const noexcept
Returns the attenuation vector.
std::ostream & operator<<(std::ostream &os, const Model &m)
Constants of physical expressions as constexpr.
constexpr Model(SplittingData gs={NAN, NAN}) noexcept
Default copy/init of Model from its only private variable.
Numeric & gu() noexcept
Returns the upper state g.
PolarizationVector for each Polarization.
const PolarizationVector & SelectPolarization(const AllPolarizationVectors &data, Polarization type) noexcept
Selects the polarization vector depending on polarization type.
Model GetAdvancedModel(const QuantumIdentifier &qid) noexcept
Returns an advanced Zeeman model.
cmplx FADDEEVA() w(cmplx z, double relerr)
constexpr Rational Mu(Rational Ju, Rational Jl, Polarization type, Index n) noexcept
Gives the upper state M value at an index.
void gl(Numeric x) noexcept
Sets the lower state g.
constexpr Numeric gl() const noexcept
Returns the lower state g.
This file contains basic functions to handle ASCII files.
constexpr Numeric SimpleGCaseA(Rational Omega, Rational J, Rational Lambda, Rational Sigma, Numeric GS, Numeric GL) noexcept
Computes the Zeeman splitting coefficient.
G0 G2 FVC Y DV Numeric Numeric Numeric Zeeman LowerQuantumNumbers void * data
AllPolarizationVectors AllPolarization_deta(Numeric theta, Numeric eta) noexcept
The derivative of AllPolarization wrt eta.
constexpr T pow2(T x)
power of two
Wigner symbol interactions.
Eigen::RowVector4d & attenuation() noexcept
Returns the attenuation vector.
Model GetSimpleModel(const QuantumIdentifier &qid) noexcept
Returns a simple Zeeman model.
const Eigen::RowVector3d & dispersion() const noexcept
Returns the dispersion vector.
Implements Zeeman modeling.
Eigen::Matrix4d matrix() const noexcept
Returns the true propagation matrix.
constexpr Numeric PolarizationFactor(Polarization type) noexcept
The renormalization factor of a polarization type.
Binary output file stream class.
Implements rational numbers to work with other ARTS types.
Eigen::RowVector3d & dispersion() noexcept
Returns the dispersion vector.
Class to identify and match lines by their quantum numbers.
Contains derived values useful for Zeeman calculations.
std::istream & operator>>(std::istream &is, Model &m)
PolarizationVector(Numeric a=1, Numeric b=0, Numeric c=0, Numeric d=0, Numeric u=0, Numeric v=0, Numeric w=0) noexcept
Default init of class.
NUMERIC Numeric
The type to use for all floating point numbers.
constexpr Derived FromPreDerived(Numeric H, Numeric theta, Numeric eta) noexcept
Sets Derived from predefined Derived parameters.
constexpr Numeric toNumeric() const
Converts this to a Numeric.
Container class for Quantum Numbers.
constexpr Index nelem(Rational Ju, Rational Jl, Polarization type) noexcept
Gives the number of elements of the polarization type of this transition.
Polarization
Zeeman polarization selection.
Zeeman::Model ZeemanModel
void gu(Numeric x) noexcept
Sets the upper state g.
constexpr Numeric gu() const noexcept
Returns the upper state g.
Numeric wigner3j(const Rational j1, const Rational j2, const Rational j3, const Rational m1, const Rational m2, const Rational m3)
Wigner 3J symbol.
Main storage for Zeeman splitting coefficients.
Binary output file stream class.
constexpr Rational start(Rational Ju, Rational Jl, Polarization type) noexcept
Gives the lowest M for a polarization type of this transition.
Derived FromGrids(Numeric u, Numeric v, Numeric w, Numeric z, Numeric a) noexcept
Computes the derived plane from ARTS grids.
constexpr Numeric SimpleGCaseB(Rational N, Rational J, Rational Lambda, Rational S, Numeric GS, Numeric GL) noexcept
Computes the Zeeman splitting coefficient.
Polarization vector for Zeeman Propagation Matrix.
bool empty() const noexcept
Returns true if the Model represents no Zeeman effect.
constexpr Numeric SimpleG(const QuantumNumbers &qns, const Numeric &GS, const Numeric &GL) noexcept
Computes the Zeeman splitting coefficient.
constexpr Rational Ml(Rational Ju, Rational Jl, Polarization type, Index n) noexcept
Gives the lower state M value at an index.
AllPolarizationVectors AllPolarization_dtheta(Numeric theta, const Numeric eta) noexcept
The derivative of AllPolarization wrt theta.
constexpr Rational end(Rational Ju, Rational Jl, Polarization type) noexcept
Gives the largest M for a polarization type of this transition.
Numeric & gl() noexcept
Returns the lower state g.
Input manipulator class for doubles to enable nan and inf parsing.
AllPolarizationVectors AllPolarization(Numeric theta, Numeric eta) noexcept
Computes the polarization of each polarization type.
This file contains the definition of String, the ARTS string class.
constexpr Index dM(Polarization type) noexcept
Gives the change of M given a polarization type.