ampsci
c++ program for high-precision atomic structure calculations of single-valence systems
Public Member Functions | List of all members
Angular::SixJTable

Lookup table for Wigner 6J symbols. More...

#include <SixJTable.hpp>

Public Member Functions

 SixJTable ()=default
 Default contructor: creates empty table.
 
 SixJTable (int max_2j_k)
 On construction, calculates + stores all possible 6j symbols up to maximum value of 2j (or k) More...
 
int max_2jk () const
 Returns maximum element (k or 2j) of tables [max(k) = 2*max(j) = max(2j)].
 
std::size_t size () const
 Returns number of non-zero symbols stored.
 
double get_2 (int a, int b, int c, int d, int e, int f) const
 Return 6j symbol {a/2,b/2,c/2,d/2,e/2,f/2}. Note: takes in 2*j/2*k as int. More...
 
template<class A , class B , class C , class D , class E , class F >
double get (const A &a, const B &b, const C &c, const D &d, const E &e, const F &f) const
 Return "magic" 6j. Pass in either integer (for k), or DiracSpinor, F. e.g.: (F,F,k,F,F,k) -> {j,j,k,j,j,k}. Do NOT *2! More...
 
bool contains (int a, int b, int c, int d, int e, int f) const
 Checks if given 6j symbol is in table (note: may not be in table because it's zero)
 
void fill (int max_2j_k)
 Fill the table. max_2jk is maximum (2*j) or k that appears in the symbols.
 

Detailed Description

Lookup table for Wigner 6J symbols.

Note: functions all called with 2*j and 2*k (ensure j integer) Makes use of symmetry (but not completely, not every stores symbol is unique).

Constructor & Destructor Documentation

◆ SixJTable()

Angular::SixJTable::SixJTable ( int  max_2j_k)
inline

On construction, calculates + stores all possible 6j symbols up to maximum value of 2j (or k)

Typically, max_2jk is 2*max_2j, where max_2j is 2* max j of set of orbitals. You may call this function several times; if the new max_2jk is larger, it will extend the table. If it is smaller, does nothing.

Member Function Documentation

◆ get()

template<class A , class B , class C , class D , class E , class F >
double Angular::SixJTable::get ( const A &  a,
const B &  b,
const C &  c,
const D &  d,
const E &  e,
const F &  f 
) const
inline

Return "magic" 6j. Pass in either integer (for k), or DiracSpinor, F. e.g.: (F,F,k,F,F,k) -> {j,j,k,j,j,k}. Do NOT *2!

Note: If requesting a 6J symbol beyond what is stored, will return 0 (without warning)

◆ get_2()

double Angular::SixJTable::get_2 ( int  a,
int  b,
int  c,
int  d,
int  e,
int  f 
) const
inline

Return 6j symbol {a/2,b/2,c/2,d/2,e/2,f/2}. Note: takes in 2*j/2*k as int.

Note: If requesting a 6J symbol beyond what is stored, will return 0 (without warning)


The documentation for this class was generated from the following file: