ampsci
c++ program for high-precision atomic structure calculations of single-valence systems
|
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. | |
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).
|
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.
|
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)
|
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)