ARTS 2.5.11 (git: 6827797f)
|
Wigner symbol interactions. More...
#include "rational.h"
#include <wigner/wigxjpf/inc/wigxjpf.h>
#include <algorithm>
#include <array>
Go to the source code of this file.
Macros | |
#define | DO_FAST_WIGNER 0 |
Functions | |
std::pair< Rational, Rational > | wigner_limits (std::pair< Rational, Rational > a, std::pair< Rational, Rational > b) |
template<Index pos> | |
constexpr std::pair< Rational, Rational > | wigner3j_limits (const Rational a=0, const Rational b=0, const Rational c=0, const Rational d=0, const Rational e=0) |
Numeric | wigner3j (const Rational j1, const Rational j2, const Rational j3, const Rational m1, const Rational m2, const Rational m3) |
Wigner 3J symbol. | |
Numeric | wigner6j (const Rational j1, const Rational j2, const Rational j3, const Rational l1, const Rational l2, const Rational l3) |
Wigner 6J symbol. | |
Index | make_wigner_ready (int largest, int fastest, int size) |
Ready Wigner. | |
bool | is_wigner_ready (int j) |
Tells if the function can deal with the input integer. | |
bool | is_wigner3_ready (const Rational &J) |
Tells if the function is ready for Wigner 3J calculations. | |
bool | is_wigner6_ready (const Rational &J) |
Tells if the function is ready for Wigner 6J calculations. | |
template<class ... Integer> | |
constexpr int | temp_init_size (Integer... vals) noexcept |
Numeric | dwigner3j (Index M, Index J1, Index J2, Index J) |
Computes the wigner 3J symbol with floating point precision. | |
Numeric | dwigner6j (Index A, Index B, Index C, Index D, Index F) |
Computes the wigner 6J symbol with floating point precision. | |
#define DO_FAST_WIGNER 0 |
Definition at line 23 of file wigner_functions.h.
Numeric dwigner3j | ( | Index | M, |
Index | J1, | ||
Index | J2, | ||
Index | J | ||
) |
Computes the wigner 3J symbol with floating point precision.
/ \ | J1 J2 J |
output = | | | M -M 0 | \ /
M | Input as above |
J1 | Input as above |
J2 | Input as above |
J | Input as above |
Definition at line 152 of file wigner_functions.cc.
Numeric dwigner6j | ( | Index | A, |
Index | B, | ||
Index | C, | ||
Index | D, | ||
Index | F | ||
) |
Computes the wigner 6J symbol with floating point precision.
/ \ | A B 1 |
output = < > | D C F | \ /
A | Input as above |
B | Input as above |
C | Input as above |
D | Input as above |
F | Input as above |
Definition at line 196 of file wigner_functions.cc.
References pow_negative_one().
bool is_wigner3_ready | ( | const Rational & | J | ) |
Tells if the function is ready for Wigner 3J calculations.
[in] | J | Largest input into a Wigner 3J function call |
Definition at line 142 of file wigner_functions.cc.
References is_wigner_ready().
Referenced by lbl_checkedCalc().
bool is_wigner6_ready | ( | const Rational & | J | ) |
Tells if the function is ready for Wigner 6J calculations.
[in] | J | Largest input into a Wigner 6J function call |
Definition at line 147 of file wigner_functions.cc.
References is_wigner_ready().
bool is_wigner_ready | ( | int | j | ) |
Tells if the function can deal with the input integer.
[in] | j |
Definition at line 137 of file wigner_functions.cc.
Referenced by is_wigner3_ready(), and is_wigner6_ready().
Index make_wigner_ready | ( | int | largest, |
int | fastest, | ||
int | size | ||
) |
Ready Wigner.
[in] | largest | |
[in] | fastest | |
[in] | size | [3 or 6] |
Definition at line 102 of file wigner_functions.cc.
Referenced by Wigner3Init(), and Wigner6Init().
|
constexprnoexcept |
Definition at line 197 of file wigner_functions.h.
References v.
Referenced by Absorption::LineMixing::Makarov2020etal::relaxation_matrix_offdiagonal().
Numeric wigner3j | ( | const Rational | j1, |
const Rational | j2, | ||
const Rational | j3, | ||
const Rational | m1, | ||
const Rational | m2, | ||
const Rational | m3 | ||
) |
Wigner 3J symbol.
Run wigxjpf wig3jj for Rational symbol
/ \
j1 j2 j3 |
---|
m1 m2 m3 |
\ /
See for definition: http://dlmf.nist.gov/34.2
[in] | j1 | as above |
[in] | j2 | as above |
[in] | j3 | as above |
[in] | m1 | as above |
[in] | m2 | as above |
[in] | m3 | as above |
Definition at line 27 of file wigner_functions.cc.
References a, ARTS_USER_ERROR, b, c, d, and WIGNER3.
Referenced by Absorption::reduced_rovibrational_dipole(), Absorption::LineMixing::LinearRovibErrorCorrectedSudden::relaxation_matrix_offdiagonal(), and Zeeman::Model::Strength().
|
constexpr |
Return the limits where a wigner3j symbol can be non-zero
The values a-e are as in a call to wigner3j with pos determining the offset. The output is the range of valid values at the offset position given the relevant triangle equaility |x - y| <= z <= x + y and that the m1 + m2 = -m3 condition for the lower row values
Positional information: pos == 1: wigner3j(X, a, b, c, d, e): b <= X + a -> X <= b - a, and |X - a| <= b -> a - b <= X <= a + b pos == 2: wigner3j(a, X, b, c, d, e): b <= a + X -> X <= b - a, and |a - X| <= b -> a + b <= X <= a - b pos == 3: wigner3j(a, b, X, c, d, e): |a - b| <= X <= a + b -> X <= b - a pos == 4: wigner3j(a, b, c, X, d, e): -|a| <= X <= |a|, and X + d = - e -> X = - e - d pos == 5: wigner3j(a, b, c, d, X, e): -|b| <= X <= |b|, and d + X = - e -> X = - e - d pos == 6: wigner3j(a, b, c, d, e, X): -|c| <= X <= |c|, and d + e = - X -> X = - e - d
If there is no valid range, the function returns {RATIONAL_UNDEFINED, RATIONAL_UNDEFINED}
[in] | pos | Position of value |
[in] | a | An input |
[in] | b | An input |
[in] | c | An input |
[in] | d | An input |
[in] | e | An input |
Definition at line 80 of file wigner_functions.h.
Numeric wigner6j | ( | const Rational | j1, |
const Rational | j2, | ||
const Rational | j3, | ||
const Rational | l1, | ||
const Rational | l2, | ||
const Rational | l3 | ||
) |
Wigner 6J symbol.
Run wigxjpf wig6jj for Rational symbol
/ \ | j1 j2 j3 | < > | l1 l2 l3 | \ /
See for definition: http://dlmf.nist.gov/34.4
[in] | j1 | as above |
[in] | j2 | as above |
[in] | j3 | as above |
[in] | l1 | as above |
[in] | l2 | as above |
[in] | l3 | as above |
Definition at line 59 of file wigner_functions.cc.
References a, ARTS_USER_ERROR, b, c, d, and WIGNER6.
Referenced by Absorption::LineMixing::Makarov2020etal::reduced_dipole(), Absorption::reduced_magnetic_quadrapole(), and Absorption::LineMixing::LinearRovibErrorCorrectedSudden::relaxation_matrix_offdiagonal().
std::pair< Rational, Rational > wigner_limits | ( | std::pair< Rational, Rational > | a, |
std::pair< Rational, Rational > | b | ||
) |
Refine limits from multiple inputs
[in] | a | A limit |
[in] | a | Another limit |
Definition at line 89 of file wigner_functions.cc.
References a, b, max(), and min().
Referenced by Absorption::LineMixing::Makarov2020etal::relaxation_matrix_offdiagonal().