|
ampsci
High-precision calculations for one- and two-valence atomic systems
|
Lookup table for Ck_ab reduced matrix elements and the special 3j symbol (j_a, j_b, k; -1/2, 1/2, 0).
Pre-computes and caches the angular symbols needed for radial matrix-element evaluation. Three quantities are stored for each triple \((k, \kappa_a, \kappa_b)\):
\[ C^k_{ab} \equiv \redmatel{\kappa_a}{C^k}{\kappa_b} = (-1)^{j_a+\frac{1}{2}}\sqrt{[j_a][j_b]} \threej{j_a}{j_b}{k}{-\tfrac{1}{2}}{\tfrac{1}{2}}{0} \,\pi(l_a+l_b+k), \]
where \([x]\equiv 2x+1\) and \(\pi\) encodes the parity selection rule. \(C^k_{ab}\) is antisymmetric under interchange up to a phase.\[ \widetilde C^k_{ab} = (-1)^{j_a+\frac{1}{2}} C^k_{ab}, \]
which is fully symmetric: \(\widetilde C^k_{ab} = \widetilde C^k_{ba}\).\[ \threej{j_a}{j_b}{k}{-\tfrac{1}{2}}{\tfrac{1}{2}}{0}. \]
All table lookups take \(k\) and the Dirac quantum numbers \(\kappa_a, \kappa_b\) as input.
_mutable variants extend the table on demand but are not thread-safe.#include <CkTable.hpp>
Public Member Functions | |
| CkTable (const int in_max_twoj=0) | |
Constructs the table, pre-filling all symbols up to in_max_twoj. | |
| void | fill (const int in_max_twoj) |
Extends the lookup table to cover all symbols up to in_max_twoj. | |
| double | get_Ckab_mutable (int k, int ka, int kb) |
| Returns Ck_ab; extends table if needed. Not thread-safe. | |
| double | get_tildeCkab_mutable (int k, int ka, int kb) |
| Returns tilde-Ck_ab; extends table if needed. Not thread-safe. | |
| double | get_3jkab_mutable (int k, int ka, int kb) |
| Returns 3j(j_a,j_b,k; -1/2,1/2,0); extends table if needed. Not thread-safe. | |
| double | get_Ckab (int k, int ka, int kb) const |
| Returns Ck_ab. Undefined behaviour if indices exceed max_tj() or max_k(). | |
| double | get_tildeCkab (int k, int ka, int kb) const |
| Returns tilde-Ck_ab. Undefined behaviour if indices exceed max_tj() or max_k(). | |
| double | get_3jkab (int k, int ka, int kb) const |
| Returns 3j(j_a,j_b,k; -1/2,1/2,0). Undefined behaviour if indices exceed max_tj() or max_k(). | |
| double | operator() (int k, int ka, int kb) const |
Equivalent to get_Ckab(k, ka, kb). | |
| double | get_Lambdakab (int k, int ka, int kb) const |
| Returns Lambda^k_ab := 3j(j_a,j_b,k; -1/2,1/2,0)^2 * parity(l_a+l_b+k). | |
| int | max_tj () const |
| Maximum value of 2j currently stored in the table. | |
| int | max_k () const |
| Maximum value of k currently stored in the table. | |
|
inline |
Constructs the table, pre-filling all symbols up to in_max_twoj.
Calls fill() internally; passing zero (the default) creates an empty table that can be extended later with fill() or the mutable accessors.
| in_max_twoj | Maximum value of \(2j\) to pre-compute. |
| void Angular::CkTable::fill | ( | const int | in_max_twoj | ) |
Extends the lookup table to cover all symbols up to in_max_twoj.
Called automatically on construction. Only needed explicitly when the required \(2j\) grows beyond the original maximum.
| in_max_twoj | New maximum value of \(2j\); no-op if already met. |
| double Angular::CkTable::get_Ckab_mutable | ( | int | k, |
| int | ka, | ||
| int | kb | ||
| ) |
Returns Ck_ab; extends table if needed. Not thread-safe.
| double Angular::CkTable::get_tildeCkab_mutable | ( | int | k, |
| int | ka, | ||
| int | kb | ||
| ) |
Returns tilde-Ck_ab; extends table if needed. Not thread-safe.
| double Angular::CkTable::get_3jkab_mutable | ( | int | k, |
| int | ka, | ||
| int | kb | ||
| ) |
Returns 3j(j_a,j_b,k; -1/2,1/2,0); extends table if needed. Not thread-safe.
| double Angular::CkTable::get_Ckab | ( | int | k, |
| int | ka, | ||
| int | kb | ||
| ) | const |
Returns Ck_ab. Undefined behaviour if indices exceed max_tj() or max_k().
| double Angular::CkTable::get_tildeCkab | ( | int | k, |
| int | ka, | ||
| int | kb | ||
| ) | const |
Returns tilde-Ck_ab. Undefined behaviour if indices exceed max_tj() or max_k().
| double Angular::CkTable::get_3jkab | ( | int | k, |
| int | ka, | ||
| int | kb | ||
| ) | const |
Returns 3j(j_a,j_b,k; -1/2,1/2,0). Undefined behaviour if indices exceed max_tj() or max_k().
|
inline |
Equivalent to get_Ckab(k, ka, kb).
| double Angular::CkTable::get_Lambdakab | ( | int | k, |
| int | ka, | ||
| int | kb | ||
| ) | const |
Returns Lambda^k_ab := 3j(j_a,j_b,k; -1/2,1/2,0)^2 * parity(l_a+l_b+k).
This is the angular factor that appears in the Coulomb interaction after angular reduction, and equals \(\left(C^k_{ab}\right)^2 / ([j_a][j_b])\) up to a phase.
|
inline |
Maximum value of 2j currently stored in the table.
|
inline |
Maximum value of k currently stored in the table.