ARTS  2.3.1285(git:92a29ea9-dirty)
wigner_functions.cc File Reference

Wigner symbol interactions. More...

#include "constants.h"
#include "wigner_functions.h"
#include <algorithm>
#include "arts_omp.h"

Go to the source code of this file.

Classes

struct  Wigner3JTriangleLimit
 

Macros

#define WIGNER3   wig3jj
 
#define WIGNER6   wig6jj
 

Functions

Numeric wigner3j (const Rational j1, const Rational j2, const Rational j3, const Rational m1, const Rational m2, const Rational m3)
 Wigner 3J symbol. More...
 
Numeric wigner6j (const Rational j1, const Rational j2, const Rational j3, const Rational l1, const Rational l2, const Rational l3)
 Wigner 6J symbol. More...
 
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. More...
 
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. More...
 
constexpr Wigner3JTriangleLimit find_wigner3j_limits (const Rational L1, const Rational L2)
 Finds the upper and lower limits of L3 given a Wigner-3J symbol: More...
 
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 value. More...
 
Numeric o2_ecs_erot_jn_same (Rational J)
 Energy of the J=N line at J. More...
 
Numeric o2_ecs_ql_makarov (Rational L, Numeric T)
 
Numeric o2_ecs_adiabatic_factor_makarov (Rational N, Numeric T)
 
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. More...
 
Numeric o2_makarov2013_reduced_dipole (const Rational &Jup, const Rational &Jlo, const Rational &N)
 Returns the reduced dipole moment following Makarov etal 2013. More...
 
Index make_wigner_ready (int largest, [[maybe_unused]] int fastest, int size)
 
bool is_wigner_ready (int j)
 Tells if the function can deal with the input integer. More...
 
bool is_wigner3_ready (const Rational &J)
 Tells if the function is ready for Wigner 3J calculations. More...
 
bool is_wigner6_ready (const Rational &J)
 Tells if the function is ready for Wigner 6J calculations. More...
 

Detailed Description

Wigner symbol interactions.

Author
Richard Larsson
Date
2013-06-19

Definition in file wigner_functions.cc.

Macro Definition Documentation

◆ WIGNER3

#define WIGNER3   wig3jj

◆ WIGNER6

#define WIGNER6   wig6jj

Function Documentation

◆ co2_ecs_wigner_symbol()

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.

Symbol: / \ / \ / \ | Ji_p L Ji | | Jf_p L Jf | | Ji Jf 1 | | | | | < > (2L + 1) | li 0 -li | | -lf 0 lf | | Jf_p Ji_p L | \ / \ / \ /

Note: The wigner library takes two times the physical values so, e.g., the 1 must be 2. This hold true for all user inputs as well!

Reference: Spectra calculations in central and wing regions of CO2 IR bands between 10 and 20 mcrons. I: model and laboratory measurements. F. Niro, C. Boulet, J.-M. Hartmann. JQSRT 88 (2004) 483 – 498. Equation 4 page 488.

Note: Ignore typos, the above is tested in relmat

Warning: Must have called wig_temp_init(j) with appropriate j before using this function. Failure to do so will cause segfault.

Parameters
[in]Jias above times 2
[in]Jfas above times 2
[in]Ji_pas above times 2
[in]Jf_pas above times 2
[in]Las above times 2
[in]lias above times 2
[in]lfas above times 2
Returns
Numeric Symbol value

Definition at line 88 of file wigner_functions.cc.

References WIGNER3, and WIGNER6.

◆ find_even_limits()

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 value.

Parameters
[in]lim1Limit 1
[in]lim2Limit 2
Returns
More limited limit

Definition at line 136 of file wigner_functions.cc.

References Wigner3JTriangleLimit::lower, and Wigner3JTriangleLimit::upper.

Referenced by o2_ecs_wigner_symbol_tran().

◆ find_wigner3j_limits()

constexpr Wigner3JTriangleLimit find_wigner3j_limits ( const Rational  L1,
const Rational  L2 
)

Finds the upper and lower limits of L3 given a Wigner-3J symbol:

/ \

L1 L2 L3
M1 M2 M3

\ /

Based on abs(L1-L2) <= L3 <= L1+L2, where L1 and L2 are positives

Parameters
[in]L1As in Wigner symbol
[in]L2As in Wigner symbol
Returns
The limits

Definition at line 122 of file wigner_functions.cc.

References abs.

Referenced by o2_ecs_wigner_symbol_tran().

◆ is_wigner3_ready()

bool is_wigner3_ready ( const Rational J)

Tells if the function is ready for Wigner 3J calculations.

Parameters
[in]JLargest input into a Wigner 3J function call
Returns
true If is_wigner_ready(3J + 1) does
false Otherwise

Definition at line 319 of file wigner_functions.cc.

References is_wigner_ready(), and Rational::toInt().

◆ is_wigner6_ready()

bool is_wigner6_ready ( const Rational J)

Tells if the function is ready for Wigner 6J calculations.

Parameters
[in]JLargest input into a Wigner 6J function call
Returns
true If is_wigner_ready(4J + 1)
false Otherwise

Definition at line 325 of file wigner_functions.cc.

References is_wigner_ready(), and Rational::toInt().

◆ is_wigner_ready()

bool is_wigner_ready ( int  j)

Tells if the function can deal with the input integer.

Parameters
[in]j
Returns
true If j is less than max allowed j
false Otherwise

Definition at line 313 of file wigner_functions.cc.

Referenced by is_wigner3_ready(), and is_wigner6_ready().

◆ make_wigner_ready()

Index make_wigner_ready ( int  largest,
[[maybe_unused] ] int  fastest,
int  size 
)

Definition at line 276 of file wigner_functions.cc.

Referenced by test_ecs20(), test_hitran2017(), Wigner3Init(), and Wigner6Init().

◆ o2_ecs_adiabatic_factor_makarov()

Numeric o2_ecs_adiabatic_factor_makarov ( Rational  N,
Numeric  T 
)

◆ o2_ecs_erot_jn_same()

Numeric o2_ecs_erot_jn_same ( Rational  J)

Energy of the J=N line at J.

Parameters
[in]JRotational quantum number
Returns
O2 energy at this level

Definition at line 159 of file wigner_functions.cc.

References Constant::pow2(), and Constant::pow3().

Referenced by o2_ecs_adiabatic_factor_makarov(), and o2_ecs_ql_makarov().

◆ o2_ecs_ql_makarov()

Numeric o2_ecs_ql_makarov ( Rational  L,
Numeric  T 
)

Definition at line 183 of file wigner_functions.cc.

References beta, o2_ecs_erot_jn_same(), and pow().

Referenced by o2_ecs_wigner_symbol_tran().

◆ o2_ecs_wigner_symbol()

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.

Symbol: / \ / \ / \ / \ | Nl Nk L | | L Jk Jl | | L Jk_p Jl_p | | L Jk Jl | | | < > < > < > | 0 0 0 | | 1 Nl Nk | | 1 Nl Nk | | 1 Jl_p Jk_p | \ / \ / \ / \ /

Note: The wigner library takes two times the physical values so, e.g., the 1 must be 2. This hold true for all user inputs as well!

Reference: D.S. Makarov, M.Yu. Tretyakov, C. Boulet, Line mixing in the 60-GHz atmospheric oxygen band: Comparison of the MPM and ECS model, Journal of Quantitative Spectroscopy and Radiative Transfer, Volume 124, 2013, Pages 1-10, ISSN 0022-4073, https://doi.org/10.1016/j.jqsrt.2013.02.019. (http://www.sciencedirect.com/science/article/pii/S0022407313000745) Abstract: Precise profiles of the 60-GHz molecular oxygen band recorded earlier in a wide temperature range by means of a resonator spectrometer at atmospheric pressure were treated. High signal-to-noise ratio allows careful study of the band shape taking into consideration the mixing effect. Comparative analysis of the band profile calculated by an extended MPM (Millimeter-wave Propagation Model) and by the ECS (Energy Corrected Sudden) approximation model is presented. Some limitations of the MPM approach are discussed on the basis of the comparison of the two models. Interbranch coupling is shown to make a noticeable contribution to absorption which means that it should be taken into account as it is expected to improve band profile modeling accuracy. Keywords: Molecular oxygen; Microwave spectroscopy; Profile shape modeling; Collisional coupling

Note: The ARTS implementation has not been tested in detail

Warning: Must have called wig_temp_init(j) with appropriate j before using this function. Failure to do so will cause segfault.

Parameters
[in]Nlas above times 2
[in]Nkas above times 2
[in]Jlas above times 2
[in]Jkas above times 2
[in]Jl_pas above times 2
[in]Jk_pas above times 2
[in]Las above times 2
Returns
Numeric Symbol value

Definition at line 94 of file wigner_functions.cc.

References WIGNER3, and WIGNER6.

◆ o2_ecs_wigner_symbol_tran()

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.

Symbol: / \ / \ / \ / \ / \ | Ni_p Ni L | | Nf_p Nf L | | L Ji Ji_p | | L Jf Jf_p | | L Ji Ji_p | | | | | < > < > < > (2L + 1) (OmegaNi / OmegaL) * QL | 0 0 0 | | 0 0 0 | | Si Ni_p Ni | < Sf Nf_p Nf | | n Jf_p Jf | \ / \ / \ / \ / \ /

Reference: H. Tran, C. Boulet, and J.-M. Hartmann Line mixing and collision-induced absorption by oxygen in the A band: Laboratory mea*surements, model, and tools for atmospheric spectra computations, Journal Of Geophysical Research, Volume 111, 2006, doi:10.1029/2005JD006869.

Note: The ARTS implementation has not been tested in detail

Warning: Must have called wig_temp_init(j) with appropriate j before using this function. Failure to do so will cause segfault.

Parameters
[in]JiInitial J of level
[in]JfFinal J of level
[in]NiInitial N of level
[in]NfFinal N of level
[in]SiInitial S of level
[in]SfFinal S of level
[in]Ji_pInitial J of pseudo-level
[in]Jf_pFinal J of pseudo-level
[in]Ni_pInitial N of pseudo-level
[in]Nf_pFinal N of pseudo-level
[in]LCoupling to pseudo-level
[in]nOrder of the tensor (n=1 is magnetic dipole)
[in]OmegaNiAdiabatic factor at initial N
[in]OmegaLAdiabatic factor at L
[in]QLAdiabatic factor at L
Returns
Numeric Symbol value

Definition at line 218 of file wigner_functions.cc.

References even(), find_even_limits(), find_wigner3j_limits(), max, o2_ecs_adiabatic_factor_makarov(), o2_ecs_ql_makarov(), o2_ecs_wigner_symbol_tran(), sqrt(), Rational::toInt(), and WIGNER3.

Referenced by o2_ecs_wigner_symbol_tran().

◆ o2_makarov2013_reduced_dipole()

Numeric o2_makarov2013_reduced_dipole ( const Rational Jup,
const Rational Jlo,
const Rational N 
)

Returns the reduced dipole moment following Makarov etal 2013.

Only for N+ and N- lines

Parameters
[in]JupUpper state's J
[in]JloLower state's J
[in]NUpp/low states' N
Returns
The reduced dipole moment

Definition at line 267 of file wigner_functions.cc.

References even(), sqrt(), Rational::toInt(), and WIGNER6.

◆ wigner3j()

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

Parameters
[in]j1as above
[in]j2as above
[in]j3as above
[in]m1as above
[in]m2as above
[in]m3as above
Returns
Numeric Symbol value

Definition at line 40 of file wigner_functions.cc.

Referenced by Zeeman::Model::Strength().

◆ wigner6j()

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

Parameters
[in]j1as above
[in]j2as above
[in]j3as above
[in]l1as above
[in]l2as above
[in]l3as above
Returns
Numeric Symbol value

Definition at line 65 of file wigner_functions.cc.

Referenced by LineRecord::reduced_magnetic_quadrapole(), and Absorption::reduced_magnetic_quadrapole().