Go to the documentation of this file.
33 #define WIGNER3 fw3jja6
34 #define WIGNER6 fw6jja
36 #define WIGNER3 wig3jj
37 #define WIGNER6 wig6jj
46 const int a = (2 * j1).toInt(), b = (2 * j2).toInt(), c = (2 * j3).toInt(),
47 d = (2 * m1).toInt(), e = (2 * m2).toInt(), f = (2 * m3).toInt();
71 const int a = (2 * j1).toInt(), b = (2 * j2).toInt(), c = (2 * j3).toInt(),
72 d = (2 * l1).toInt(), e = (2 * l2).toInt(), f = (2 * l3).toInt();
89 int Ji,
int Jf,
int Ji_p,
int Jf_p,
int L,
int li,
int lf) {
90 return WIGNER3(Ji_p, L, Ji, li, 0, -li) *
WIGNER3(Jf_p, L, Jf, -lf, 0, lf) *
95 int Nl,
int Nk,
int Jl,
int Jk,
int Jl_p,
int Jk_p,
int L) {
96 return WIGNER3(Nl, Nk, L, 0, 0, 0) *
WIGNER6(L, Jk, Jl, 2, Nl, Nk) *
97 WIGNER6(L, Jk_p, Jl_p, 2, Nl, Nk) *
WIGNER6(L, Jk, Jl, 2, Jl_p, Jk_p);
125 return {
abs(L1-L2).toInt(), (L1+L2).toInt()};
165 constexpr
auto B = 43100.44276e6;
166 constexpr
auto D = 145.1271e3;
167 constexpr
auto H = 49e-3;
168 constexpr
auto lB = 59501.3438e6;
169 constexpr
auto lD = 58.3680e3;
170 constexpr
auto lH = 290.8e-3;
171 constexpr
auto gB = -252.58634e6;
172 constexpr
auto gD = -243.42;
173 constexpr
auto gH = -1.46e-3;
175 const auto lJ = (J * (J + 1)).toNumeric();
178 (gB + gD*lJ + gH*
pow2(lJ)) +
179 2.0/3.0 * (lB + lD*lJ + lH*
pow2(lJ)));
192 (2*L + 1).toNumeric() /
pow(L * (L+1), lambda) * std::exp(-
beta * el / (k*T));
199 using Constant::h_bar;
209 auto wnnm2 = (en - enm2) / h_bar;
211 auto v_bar =
std::sqrt(8*k*T/(pi * 31.989830 * m_u));
212 auto tauc = dc / v_bar;
214 return 1.0 /
pow2(1 + 1.0/24.0 *
pow2(wnnm2 * tauc));
247 auto f =
sqrt(2*Ni+1) *
sqrt(2*Ni_p+1) *
sqrt(2*Jf+1) *
sqrt(2*Jf_p+1) *
sqrt(2*Nf+1) *
sqrt(2*Nf_p+1) * (2*Ji_p+1).toNumeric();
248 auto g =
even(Ji_p + Ji + n) ? 1 : -1;
251 for (
int L=lims.lower; L<=lims.upper; L+=2) {
270 (
even(Jlo +
N) ? 1 : -1) *
271 sqrt(6 * (2*Jlo + 1) * (2*Jup + 1)) *
277 [[maybe_unused]]
int fastest,
282 fastwigxj_load(FAST_WIGNER_PATH_3J, 3, NULL);
284 fastwigxj_thread_dyn_init(3, fastest);
286 fastwigxj_dyn_init(3, fastest);
289 wig_table_init(largest, 3);
292 }
else if (size == 6) {
294 fastwigxj_load(FAST_WIGNER_PATH_3J, 3, NULL);
295 fastwigxj_load(FAST_WIGNER_PATH_6J, 6, NULL);
297 fastwigxj_thread_dyn_init(3, fastest);
298 fastwigxj_thread_dyn_init(6, fastest);
300 fastwigxj_dyn_init(3, fastest);
301 fastwigxj_dyn_init(6, fastest);
304 wig_table_init(largest * 2, 6);
314 extern int wigxjpf_max_prime_decomp;
315 return not(j > wigxjpf_max_prime_decomp);
320 const int test = J.
toInt(6) / 2 + 1;
326 const int test = J.
toInt(4) + 1;
Numeric o2_ecs_adiabatic_factor_makarov(Rational N, Numeric T)
Numeric wigner6j(const Rational j1, const Rational j2, const Rational j3, const Rational l1, const Rational l2, const Rational l3)
Wigner 6J symbol.
Wigner symbol interactions.
bool is_wigner3_ready(const Rational &J)
Tells if the function is ready for Wigner 3J calculations.
Numeric o2_ecs_erot_jn_same(Rational J)
Energy of the J=N line at J.
Numeric o2_ecs_ql_makarov(Rational L, Numeric T)
Numeric wigner3j(const Rational j1, const Rational j2, const Rational j3, const Rational m1, const Rational m2, const Rational m3)
Wigner 3J symbol.
constexpr Wigner3JTriangleLimit find_even_limits(const Wigner3JTriangleLimit lim1, const Wigner3JTriangleLimit lim2)
Combines two limits and return the highest even-numbered low value and the lowest numbered even high ...
bool is_wigner6_ready(const Rational &J)
Tells if the function is ready for Wigner 6J calculations.
Index make_wigner_ready(int largest, [[maybe_unused]] int fastest, int size)
Numeric sqrt(const Rational r)
Square root.
Numeric pow(const Rational base, Numeric exp)
Power of.
constexpr T angstrom2meter(T x)
constexpr bool even(const Rational r)
Returns true if even integer.
constexpr int toInt(int n=1) const
Converts the value to int by n-scaled division in Index form.
NUMERIC Numeric
The type to use for all floating point numbers.
Numeric co2_ecs_wigner_symbol(int Ji, int Jf, int Ji_p, int Jf_p, int L, int li, int lf)
Returns the wigner symbol used in Niro etal 2004.
Numeric o2_ecs_wigner_symbol(int Nl, int Nk, int Jl, int Jk, int Jl_p, int Jk_p, int L)
Returns the wigner symbol used in Makarov etal 2013.
constexpr T pow3(T x)
power of three
Constants of physical expressions as constexpr.
constexpr Wigner3JTriangleLimit find_wigner3j_limits(const Rational L1, const Rational L2)
Finds the upper and lower limits of L3 given a Wigner-3J symbol:
Numeric o2_makarov2013_reduced_dipole(const Rational &Jup, const Rational &Jlo, const Rational &N)
Returns the reduced dipole moment following Makarov etal 2013.
constexpr T pow2(T x)
power of two
INDEX Index
The type to use for all integer numbers and indices.
Header file for helper functions for OpenMP.
Numeric o2_ecs_wigner_symbol_tran(const Rational &Ji, const Rational &Jf, const Rational &Ni, const Rational &Nf, const Rational &Si, const Rational &Sf, const Rational &Ji_p, const Rational &Jf_p, const Rational &Ni_p, const Rational &Nf_p, const Rational &n, const Numeric &T)
Returns the wigner symbol used in Tran etal 2006.
bool is_wigner_ready(int j)
Tells if the function can deal with the input integer.
Implements rational numbers to work with other ARTS types.