2#include "Angular/include.hpp" 
    3#include "Wavefunction/DiracSpinor.hpp" 
   17           std::vector<double> &ykab, 
const std::size_t maxi = 0);
 
   21           std::vector<double> &b0, std::vector<double> &binf,
 
   22           const std::size_t maxi = 0);
 
   26           std::vector<double> &g0, std::vector<double> &ginf,
 
   27           const std::size_t maxi = 0);
 
   37               const std::vector<double> &ykbd);
 
   45                    const std::vector<double> &ykbd);
 
   49             const std::vector<double> &ykbd);
 
   66              const DiracSpinor &d, 
int tma, 
int tmb, 
int tmc, 
int tmd);
 
   73bool Qk_abcd_SR(
int k, 
int ka, 
int kb, 
int kc, 
int kd);
 
   80bool Pk_abcd_SR(
int k, 
int ka, 
int kb, 
int kc, 
int kd);
 
  113std::pair<int, int> 
k_minmax_Ck(
int kappa_a, 
int kappa_b);
 
  128std::pair<int, int> 
k_minmax_Q(
int kappa_a, 
int kappa_b, 
int kappa_c,
 
  147static int twojk(
const A &a) {
 
  148  if constexpr (std::is_same_v<A, DiracSpinor>) {
 
  151    static_assert(std::is_same_v<A, int>);
 
  157static std::optional<int> twojknull(
const A &a) {
 
  158  if constexpr (std::is_same_v<A, DiracSpinor>) {
 
  160  } 
else if constexpr (std::is_same_v<A, int>) {
 
  161    static_assert(std::is_same_v<A, int>);
 
  168template <
class A, 
class B, 
class C, 
class D, 
class E, 
class F>
 
  169static double sixj(
const A &a, 
const B &b, 
const C &c, 
const D &d, 
const E &e,
 
  171  return Angular::sixj_2(twojk(a), twojk(b), twojk(c), twojk(d), twojk(e),
 
  175template <
class A = std::optional<
int>, 
class B = std::optional<
int>,
 
  176          class C = std::optional<
int>, 
class D = std::optional<
int>,
 
  177          class E = std::optional<
int>, 
class F = std::optional<
int>>
 
  178static bool sixjTriads(
const A &a, 
const B &b, 
const C &c, 
const D &d,
 
  179                       const E &e, 
const F &f) {
 
  181                             twojknull(d), twojknull(e), twojknull(f));
 
  184template <
class A, 
class B, 
class C>
 
  185static bool triangle(
const A &a, 
const B &b, 
const C &c) {
 
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:41
 
double sixj_2(int two_j1, int two_j2, int two_j3, int two_j4, int two_j5, int two_j6)
6j symbol {j1 j2 j3 \ j4 j5 j6} - [takes 2*j as int]
Definition Wigner369j.hpp:267
 
constexpr int triangle(int j1, int j2, int J)
Returns 1 if triangle rule is satisfied. nb: works with j OR twoj!
Definition Wigner369j.hpp:162
 
bool sixjTriads(std::optional< int > a, std::optional< int > b, std::optional< int > c, std::optional< int > d, std::optional< int > e, std::optional< int > f)
Checks if a 6j symbol is valid - each input is optional.
Definition Wigner369j.hpp:248
 
Functions (+classes) for computing Coulomb integrals.
Definition CoulombIntegrals.cpp:13
 
std::pair< int, int > k_minmax_tj(int tja, int tjb)
Returns min and max k (multipolarity) allowed for Triangle(k,a,b), NOT accounting for parity (2j only...
Definition CoulombIntegrals.cpp:551
 
DiracSpinor Qkv_bcd(const int k, const int kappa_a, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd)
Calculates Q^k(v)_bcd for given k,kappa_v. From scratch (calculates y) [see YkTable version if alread...
Definition CoulombIntegrals.cpp:398
 
bool Pk_abcd_SR(int k, int ka, int kb, int kc, int kd)
Just selection rule for Pk_abcd.
Definition CoulombIntegrals.cpp:388
 
std::pair< int, int > k_minmax_Ck(const DiracSpinor &a, const DiracSpinor &b)
Returns min and max k (multipolarity) allowed for C^k_ab, accounting for parity (used by k_minmax_Q)
Definition CoulombIntegrals.cpp:519
 
double g_abcd(const DiracSpinor &a, const DiracSpinor &b, const DiracSpinor &c, const DiracSpinor &d, int tma, int tmb, int tmc, int tmd)
Calculates g from scratch - not used often.
Definition CoulombIntegrals.cpp:491
 
double Rk_abcd(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd)
Calculates R^k_abcd for given k. From scratch (calculates y)
Definition CoulombIntegrals.cpp:300
 
double Qk_abcd(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd)
Calculates Q^k_abcd for given k. From scratch (calculates y) [see YkTable version if already have YkT...
Definition CoulombIntegrals.cpp:357
 
DiracSpinor Rkv_bcd(const int k, const int kappa_a, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd)
"Right-hand-side" R^k{v}_bcd [i.e., without Fv integral]
Definition CoulombIntegrals.cpp:320
 
bool Qk_abcd_SR(int k, int ka, int kb, int kc, int kd)
Just selection rule for Qk_abcd.
Definition CoulombIntegrals.cpp:379
 
double Pk_abcd(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd)
Exchange only version of W (W-Q): W = Q + P [see Qk above].
Definition CoulombIntegrals.cpp:428
 
std::pair< int, int > k_minmax_P(const DiracSpinor &a, const DiracSpinor &b, const DiracSpinor &c, const DiracSpinor &d)
Returns min and max k (multipolarity) allowed for P^k_abcd. DOES NOT contain parity rules (6j only) -...
Definition CoulombIntegrals.cpp:591
 
DiracSpinor Pkv_bcd(const int k, int kappa_a, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd)
Exchange only version of W (W-Q): W = Q + P [see Qk above].
Definition CoulombIntegrals.cpp:449
 
double Wk_abcd(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd)
Calculates W^k_abcd for given k. From scratch (calculates y)
Definition CoulombIntegrals.cpp:484
 
void bk_ab(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, std::vector< double > &b0, std::vector< double > &binf, std::size_t maxi)
Breit b^k function: (0,r) and (r,inf) part stored sepperately (in/out)
Definition CoulombIntegrals.cpp:236
 
std::pair< int, int > k_minmax_W(const DiracSpinor &a, const DiracSpinor &b, const DiracSpinor &c, const DiracSpinor &d)
Returns min and max k (multipolarity) allowed for W^k_abcd. DOES NOT contain parity rules (6j only) -...
Definition CoulombIntegrals.cpp:611
 
std::pair< int, int > k_minmax_Q(const DiracSpinor &a, const DiracSpinor &b, const DiracSpinor &c, const DiracSpinor &d)
Returns min and max k (multipolarity) allowed for Q^k_abcd. Parity rule is included,...
Definition CoulombIntegrals.cpp:556
 
void gk_ab(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, std::vector< double > &g0, std::vector< double > &ginf, const std::size_t maxi)
Breit g^k function: (0,r) + (r,inf) part stored together (in/out)
Definition CoulombIntegrals.cpp:266
 
std::vector< double > yk_ab(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const std::size_t maxi)
Calculates Hartree Screening functions .
Definition CoulombIntegrals.cpp:179