ARTS 2.5.11 (git: 6827797f)
|
Implements Zeeman modeling. More...
Classes | |
struct | AllPolarizationVectors |
PolarizationVector for each Polarization. More... | |
struct | Derived |
Contains derived values useful for Zeeman calculations. More... | |
class | Model |
Main Zeeman Model. More... | |
struct | PolarizationVector |
Polarization vector for Zeeman Propagation Matrix. More... | |
struct | SplittingData |
Main storage for Zeeman splitting coefficients. More... | |
Enumerations | |
enum class | Polarization : char { SigmaMinus , Pi , SigmaPlus , None } |
Zeeman polarization selection. More... | |
Functions | |
std::ostream & | operator<< (std::ostream &os, const Model &m) |
std::istream & | operator>> (std::istream &is, Model &m) |
std::ostream & | operator<< (bofstream &bof, const Model &m) |
std::istream & | operator>> (bifstream &bif, Model &m) |
AllPolarizationVectors | AllPolarization (Numeric theta, Numeric eta) noexcept |
Computes the polarization of each polarization type. | |
AllPolarizationVectors | AllPolarization_dtheta (Numeric theta, const Numeric eta) noexcept |
The derivative of AllPolarization wrt theta. | |
AllPolarizationVectors | AllPolarization_deta (Numeric theta, Numeric eta) noexcept |
The derivative of AllPolarization wrt eta. | |
const PolarizationVector & | SelectPolarization (const AllPolarizationVectors &data, Polarization type) noexcept |
Selects the polarization vector depending on polarization type. | |
void | sum (PropagationMatrix &pm, const ComplexVectorView &abs, const PolarizationVector &polvec, const bool do_phase=true) ARTS_NOEXCEPT |
Sums the Zeeman components into a propagation matrix. | |
void | dsum (PropagationMatrix &dpm, const ComplexVectorView &abs, const ComplexVectorView &dabs, const PolarizationVector &polvec, const PolarizationVector &dpolvec_dtheta, const PolarizationVector &dpolvec_deta, const Numeric dH, const Numeric dtheta, const Numeric deta, const bool do_phase=true) ARTS_NOEXCEPT |
Sums the Zeeman components derivatives into a propagation matrix. | |
constexpr Index | dM (Polarization type) noexcept |
Gives the change of M given a polarization type. | |
constexpr Rational | start (Rational Ju, Rational Jl, Polarization type) noexcept |
Gives the lowest M for a polarization type of this transition. | |
constexpr Rational | end (Rational Ju, Rational Jl, Polarization type) noexcept |
Gives the largest M for a polarization type of this transition. | |
constexpr Index | nelem (Rational Ju, Rational Jl, Polarization type) noexcept |
Gives the number of elements of the polarization type of this transition. | |
constexpr Rational | Mu (Rational Ju, Rational Jl, Polarization type, Index n) noexcept |
Gives the upper state M value at an index. | |
constexpr Rational | Ml (Rational Ju, Rational Jl, Polarization type, Index n) noexcept |
Gives the lower state M value at an index. | |
constexpr Numeric | PolarizationFactor (Polarization type) noexcept |
The renormalization factor of a polarization type. | |
constexpr Numeric | SimpleGCaseB (Rational N, Rational J, Rational Lambda, Rational S, Numeric GS, Numeric GL) noexcept |
Computes the Zeeman splitting coefficient. | |
constexpr Numeric | SimpleGCaseA (Rational Omega, Rational J, Rational Lambda, Rational Sigma, Numeric GS, Numeric GL) noexcept |
Computes the Zeeman splitting coefficient. | |
Model | GetSimpleModel (const QuantumIdentifier &qid) ARTS_NOEXCEPT |
Returns a simple Zeeman model. | |
Model | GetAdvancedModel (const QuantumIdentifier &qid) ARTS_NOEXCEPT |
Returns an advanced Zeeman model. | |
Derived | FromGrids (Numeric u, Numeric v, Numeric w, Numeric z, Numeric a) noexcept |
Computes the derived plane from ARTS grids. | |
constexpr Derived | FromPreDerived (Numeric H, Numeric theta, Numeric eta) noexcept |
Sets Derived from predefined Derived parameters. | |
Implements Zeeman modeling.
|
strong |
Zeeman polarization selection.
Enumerator | |
---|---|
SigmaMinus | |
Pi | |
SigmaPlus | |
None |
Definition at line 27 of file zeemandata.h.
|
noexcept |
Computes the polarization of each polarization type.
[in] | theta | The angle along the magnetic field |
[in] | eta | The angle counter-clockwise in the magnetic field plane |
Definition at line 352 of file zeemandata.cc.
References Zeeman::AllPolarizationVectors::pi, Zeeman::AllPolarizationVectors::sm, and Zeeman::AllPolarizationVectors::sp.
Referenced by propmat_clearskyAddOnTheFlyLineMixingWithZeeman(), and zeeman_on_the_fly().
|
noexcept |
The derivative of AllPolarization wrt eta.
[in] | theta | The angle along the magnetic field |
[in] | eta | The angle counter-clockwise in the magnetic field plane |
Definition at line 384 of file zeemandata.cc.
References Zeeman::AllPolarizationVectors::pi, Zeeman::AllPolarizationVectors::sm, and Zeeman::AllPolarizationVectors::sp.
Referenced by propmat_clearskyAddOnTheFlyLineMixingWithZeeman(), and zeeman_on_the_fly().
|
noexcept |
The derivative of AllPolarization wrt theta.
[in] | theta | The angle along the magnetic field |
[in] | eta | The angle counter-clockwise in the magnetic field plane |
Definition at line 367 of file zeemandata.cc.
References Zeeman::AllPolarizationVectors::pi, Zeeman::AllPolarizationVectors::sm, and Zeeman::AllPolarizationVectors::sp.
Referenced by propmat_clearskyAddOnTheFlyLineMixingWithZeeman(), and zeeman_on_the_fly().
|
constexprnoexcept |
Gives the change of M given a polarization type.
[in] | type | The polarization type |
Definition at line 35 of file zeemandata.h.
References None, Pi, SigmaMinus, and SigmaPlus.
Referenced by Ml(), and Zeeman::Model::Strength().
void Zeeman::dsum | ( | PropagationMatrix & | dpm, |
const ComplexVectorView & | abs, | ||
const ComplexVectorView & | dabs, | ||
const PolarizationVector & | polvec, | ||
const PolarizationVector & | dpolvec_dtheta, | ||
const PolarizationVector & | dpolvec_deta, | ||
const Numeric | dH, | ||
const Numeric | dtheta, | ||
const Numeric | deta, | ||
const bool | do_phase = true |
||
) |
Sums the Zeeman components derivatives into a propagation matrix.
[in,out] | pm | The propagation matrix derivative |
[in] | abs | The complex absorption vector |
[in] | dabs | The complex absorption vector derivative w.r.t. H |
[in] | polvec | The polarization vector |
[in] | dpolvec_dtheta | The polarization vector derivative w.r.t. theta |
[in] | dpolvec_deta | The polarization vector derivative w.r.t. eta |
[in] | dH | The derivative w.r.t. H |
[in] | dtheta | The derivative w.r.t. theta |
[in] | deta | The derivative w.r.t. eta |
Definition at line 437 of file zeemandata.cc.
References ARTS_ASSERT.
Referenced by propmat_clearskyAddOnTheFlyLineMixingWithZeeman(), and zeeman_on_the_fly().
|
constexprnoexcept |
Gives the largest M for a polarization type of this transition.
Since the polarization determines the change in M, this function gives the last M of interest in the range of M possible for a given transition
The user has to ensure that Ju and Jl is a valid transition
[in] | Ju | J of the upper state |
[in] | Jl | J of the upper state |
[in] | type | The polarization type |
Definition at line 96 of file zeemandata.h.
References min(), None, Pi, SigmaMinus, and SigmaPlus.
Referenced by nelem().
|
noexcept |
Computes the derived plane from ARTS grids.
When done and if everything is well-defined:
\[ H = \sqrt{u^2 + v^2 + w^2}, \]
\[ \theta = \arccos \left( \vec{n} \cdot \vec{n}_H \right), \]
\[ \eta = \arctan\left( \frac{y}{x} \right), \]
\[ \frac{\partial H}{\partial \vec{H}} = \vec{n}_H, \]
\[ \frac{\partial \theta}{\partial \vec{H}} = \frac{\vec{n}_H \cos{\theta} - \vec{n}}{H\sin\theta}, \]
\[ \frac{\partial \eta}{\partial \vec{H}} = \frac{\vec{n}\times\vec{n}_H}{H\left(x^2 + y^2\right)} \]
With these helpers (some defined, others not):
\[ \vec{H} = \left[\begin{array}{l} v \\ u \\ w \end{array}\right], \]
\[ \vec{n}_H = \frac{\vec{H}}{H} , \]
\[ \vec{n} = \left[\begin{array}{r} \cos a \sin z \\ \sin a\sin z \\ \cos z \end{array}\right], \]
\[ \vec{e}_v = \left[\begin{array}{r} \cos a \cos z \\ \sin a\cos z \\ -\sin z \end{array}\right], \]
\[ y = \left\{\vec{e}_v \times \left[\vec{n}_H - \left(\vec{n}_H\cdot\vec{n}\right)\vec{n}\right]\right\} \cdot \vec{n}, \]
\[ x = \vec{e}_v \cdot \left[\vec{n}_H - \left(\vec{n}_H\cdot\vec{n}\right)\vec{n}\right] \]
Note that all other values are zero if \( H \) is zero, that \( \frac{\partial \theta}{\partial \vec{H}} \) is zero if \( \sin{\theta} \) is zero, that \( \frac{\partial \eta}{\partial \vec{H}} \) is zero if \( x \) and \( y \) are zero, and that the atan2(y, x) function is used for \( \eta \) to compensate for when \( x \) is zero.
[in] | u | Magnetic field u-parameter |
[in] | v | Magnetic field b-parameter |
[in] | w | Magnetic field w-parameter |
[in] | z | Zenith angle |
[in] | a | Azimuth angle |
Definition at line 261 of file zeemandata.cc.
References a, Zeeman::Derived::deta_du, Zeeman::Derived::deta_dv, Zeeman::Derived::deta_dw, Zeeman::Derived::dH_du, Zeeman::Derived::dH_dv, Zeeman::Derived::dH_dw, Zeeman::Derived::dtheta_du, Zeeman::Derived::dtheta_dv, Zeeman::Derived::dtheta_dw, Zeeman::Derived::eta, ev_xyz_by_za_local(), FromPreDerived(), Zeeman::Derived::H, los_xyz_by_uvw_local(), los_xyz_by_za_local(), Math::pow2(), Zeeman::Derived::theta, u, v, and w.
Referenced by propmat_clearskyAddOnTheFlyLineMixingWithZeeman(), and zeeman_on_the_fly().
|
constexprnoexcept |
Sets Derived from predefined Derived parameters.
[in] | H | Derived magnetic field strength |
[in] | theta | Derived magnetic field theta angle |
[in] | eta | Derived magnetic field eta angle |
Definition at line 551 of file zeemandata.h.
Referenced by FromGrids(), and zeeman_on_the_fly().
Zeeman::Model Zeeman::GetAdvancedModel | ( | const QuantumIdentifier & | qid | ) |
Returns an advanced Zeeman model.
Will look at available Quantum numbers and use best approximation for the model to use. If no good approximation is available, it returns Model({0, 0}).
[in] | qid | Transition type quantum id |
Definition at line 115 of file zeemandata.cc.
References case_b_g_coefficient_o2(), closed_shell_trilinear(), and Constant::mass_ratio_electrons_per_proton.
Referenced by Zeeman::Model::Model(), ReadArrayOfARTSCAT(), ReadARTSCAT(), ReadHITRAN(), ReadJPL(), and ReadLBLRTM().
Zeeman::Model Zeeman::GetSimpleModel | ( | const QuantumIdentifier & | qid | ) |
Returns a simple Zeeman model.
Will use the simple Hund case provided by input. Throws if the input is bad
[in] | qid | Transition type quantum id |
Definition at line 55 of file zeemandata.cc.
References get_lande_lambda_constant(), get_lande_spin_constant(), and SimpleG().
Referenced by Zeeman::Model::Model().
|
constexprnoexcept |
Gives the lower state M value at an index.
The user has to ensure that Ju and Jl is a valid transition
The user has to ensure n is less than the number of elements
[in] | Ju | J of the upper state |
[in] | Jl | J of the upper state |
[in] | type | The polarization type |
[in] | n | The position |
Definition at line 163 of file zeemandata.h.
Referenced by Zeeman::Model::Splitting(), and Zeeman::Model::Strength().
|
constexprnoexcept |
Gives the upper state M value at an index.
The user has to ensure that Ju and Jl is a valid transition
The user has to ensure n is less than the number of elements
[in] | Ju | J of the upper state |
[in] | Jl | J of the upper state |
[in] | type | The polarization type |
[in] | n | The position |
Definition at line 142 of file zeemandata.h.
References start().
Referenced by Ml(), Zeeman::Model::Splitting(), and Zeeman::Model::Strength().
|
constexprnoexcept |
Gives the number of elements of the polarization type of this transition.
The user has to ensure that Ju and Jl is a valid transition
[in] | Ju | J of the upper state |
[in] | Jl | J of the upper state |
[in] | type | The polarization type |
Definition at line 125 of file zeemandata.h.
References end(), and start().
Referenced by Absorption::Lines::ZeemanCount().
Definition at line 342 of file zeemandata.cc.
std::ostream & Zeeman::operator<< | ( | std::ostream & | os, |
const Model & | m | ||
) |
Definition at line 332 of file zeemandata.cc.
Definition at line 347 of file zeemandata.cc.
std::istream & Zeeman::operator>> | ( | std::istream & | is, |
Model & | m | ||
) |
Definition at line 337 of file zeemandata.cc.
|
constexprnoexcept |
The renormalization factor of a polarization type.
The polarization comes from some geometry. This function returns the factor we need to compute that geometry and to turn it into something that normalizes every possible M for this type into some strength that sums to unity
[in] | type | The polarization type |
Definition at line 181 of file zeemandata.h.
References None, Pi, SigmaMinus, and SigmaPlus.
Referenced by Zeeman::Model::Strength().
|
noexcept |
Selects the polarization vector depending on polarization type.
[in] | data | The pre-computed polarization vectors |
[in] | type | The type of polarization to select |
This should never be reached
Definition at line 402 of file zeemandata.cc.
References None, Pi, SigmaMinus, and SigmaPlus.
Referenced by propmat_clearskyAddOnTheFlyLineMixingWithZeeman(), and zeeman_on_the_fly().
|
constexprnoexcept |
Computes the Zeeman splitting coefficient.
The level should be Hund case a type and all the values have to be defined
[in] | Omega | The Omega quantum number of the level |
[in] | J | The J quantum number of the level |
[in] | Lambda | The Lambda quantum number of the level |
[in] | Sigma | The Sigma quantum number of the level |
[in] | GS | The spin Landé coefficient of the molecule |
[in] | GL | The Landé coefficient of the molecule |
Definition at line 245 of file zeemandata.h.
Referenced by SimpleG().
|
constexprnoexcept |
Computes the Zeeman splitting coefficient.
The level should be Hund case b type and all the values have to be defined
[in] | N | The N quantum number of the level |
[in] | J | The J quantum number of the level |
[in] | Lambda | The Lambda quantum number of the level |
[in] | S | The S quantum number of the level |
[in] | GS | The spin Landé coefficient of the molecule |
[in] | GL | The Landé coefficient of the molecule |
Definition at line 209 of file zeemandata.h.
Referenced by SimpleG().
|
constexprnoexcept |
Gives the lowest M for a polarization type of this transition.
Since the polarization determines the change in M, this function gives the first M of interest in the range of M possible for a given transition
The user has to ensure that Ju and Jl is a valid transition
[in] | Ju | J of the upper state |
[in] | Jl | J of the upper state |
[in] | type | The polarization type |
Definition at line 63 of file zeemandata.h.
References min(), None, Pi, SigmaMinus, and SigmaPlus.
void Zeeman::sum | ( | PropagationMatrix & | pm, |
const ComplexVectorView & | abs, | ||
const PolarizationVector & | polvec, | ||
const bool | do_phase = true |
||
) |
Sums the Zeeman components into a propagation matrix.
[in,out] | pm | The propagation matrix |
[in] | abs | The complex absorption vector |
[in] | polvec | The polarization vector |
Definition at line 417 of file zeemandata.cc.
References ARTS_ASSERT.
Referenced by propmat_clearskyAddOnTheFlyLineMixingWithZeeman(), and zeeman_on_the_fly().