2#include "Angular/CkTable.hpp"
3#include "Angular/SixJTable.hpp"
4#include "Wavefunction/DiracSpinor.hpp"
7#ifdef YKTABLE_USE_STD_MAP
8#include <unordered_map>
10#include "ankerl/unordered_dense.h"
19#ifdef YKTABLE_USE_STD_MAP
20using YkMap = std::unordered_map<uint32_t, std::vector<double>>;
22using YkMap = ankerl::unordered_dense::map<uint32_t, std::vector<double>>;
49 std::vector<YkMap> m_Y{};
54 YkTable(
const std::vector<DiracSpinor> &a_orbs,
55 const std::vector<DiracSpinor> &b_orbs) {
66 void calculate(
const std::vector<DiracSpinor> &as,
67 const std::vector<DiracSpinor> &bs);
87 [[nodiscard]]
double R(
const int k,
const DiracSpinor &Fa,
93 [[nodiscard]]
double Q(
const int k,
const DiracSpinor &Fa,
99 [[nodiscard]]
double P(
const int k,
const DiracSpinor &Fa,
103 [[nodiscard]]
double P2(
const int k,
const DiracSpinor &Fa,
106 const std::vector<double> &fk = {})
const;
110 [[nodiscard]]
double W(
const int k,
const DiracSpinor &Fa,
126 const DiracSpinor &Fd,
const std::vector<double> &f2k = {})
const;
129 bool empty()
const {
return m_Y.empty(); }
135 void allocate_space(
const std::vector<DiracSpinor> &a_orbs,
136 const std::vector<DiracSpinor> &b_orbs);
143 std::vector<double> &get_or_insert(std::size_t k, uint32_t key);
146 std::vector<double> &get_ref(
const int k,
const DiracSpinor &Fa,
Lookup table for Ck_ab reduced matrix elements and the special 3j symbol (j_a, j_b,...
Definition CkTable.hpp:62
Lookup table for Wigner 6j symbols.
Definition SixJTable.hpp:82
Calculates + stores Hartree Y functions + Angular (w/ look-up), taking advantage of symmetry.
Definition YkTable.hpp:46
DiracSpinor Pkv_bcd(const int k, int kappa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd, const std::vector< double > &f2k={}) const
Calculates P^K(v)_bcd using existing yk integrals, including (optional) screening factors....
Definition YkTable.cpp:229
DiracSpinor Qkv_bcd(const int k, int kappa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Calculates Q^K(v)_bcd using existing yk integrals. Note: Ck tables must include all required values,...
Definition YkTable.cpp:207
const Angular::CkTable & Ck() const
Returns a (const ref) to Ck table [see Angular::CkTable].
Definition YkTable.hpp:76
double Q(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Calculates Qk using the existing yk integrals. Note: Ck tables must include all required values,...
Definition YkTable.cpp:129
const Angular::SixJTable & SixJ() const
Returns a (const ref) to SixJ table [see Angular::SixJTable].
Definition YkTable.hpp:78
void calculate(const std::vector< DiracSpinor > &as, const std::vector< DiracSpinor > &bs)
Re-calculates all y_ab functions (will over-ride existing ones); NOTE: only calculates for a in as,...
Definition YkTable.cpp:14
const std::vector< double > * get(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb) const
Returns a pointer to constant vector y^k_ab. If that integral is not stored, returns nullptr.
Definition YkTable.cpp:70
double W(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Calculates Wk=Qk+Pk using the existing yk integrals. Note: Ck tables must include all required values...
Definition YkTable.cpp:201
double R(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Calculates Rk using the existing yk integrals. Note: Ck tables must include all required values,...
Definition YkTable.cpp:118
double P(const int k, const DiracSpinor &Fa, const DiracSpinor &Fb, const DiracSpinor &Fc, const DiracSpinor &Fd) const
Calculates Pk using the existing yk integrals. Note: Ck tables must include all required values,...
Definition YkTable.cpp:147
void extend_angular(int new_max_2j)
Extends the Ck and 6J tables up to new maximum 2*j.
Definition YkTable.cpp:46
void calculate(const std::vector< DiracSpinor > &as)
Re-calculates all y_ij functions (will over-ride existing ones) [i and j in as].
Definition YkTable.hpp:70
bool empty() const
Checks if table is empty.
Definition YkTable.hpp:129
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:55
Functions (+classes) for computing Coulomb integrals.
Definition CoulombBreit.cpp:13
ankerl::unordered_dense::map< uint32_t, std::vector< double > > YkMap
Hashmap type used to store the y^k_ab radial functions (one map per k).
Definition YkTable.hpp:22