2#include "Angular/Angular.hpp"
3#include "Coulomb/Coulomb.hpp"
4#include "Wavefunction/DiracSpinor.hpp"
18std::pair<std::vector<DiracSpinor>, std::vector<DiracSpinor>>
19split_basis(
const std::vector<DiracSpinor> &basis,
double E_Fermi,
20 int min_n_core = 1,
int max_n_excited = 999);
29 const std::vector<DiracSpinor> &excited,
46std::pair<int, int>
k_minmax_S(
int twoj_v,
int twoj_w,
int twoj_x,
int twoj_y);
57template <
class CoulombIntegral>
59 const CoulombIntegral &qk,
const std::vector<DiracSpinor> &core,
60 const std::vector<DiracSpinor> &excited,
62 int max_l_internal = 99,
63 std::optional<double> ev = std::nullopt);
66double e_bar(
int kappa_v,
const std::vector<DiracSpinor> &excited);
71namespace InternalSigma {
76 const std::vector<DiracSpinor> &core,
77 const std::vector<DiracSpinor> &excited,
84 const std::vector<DiracSpinor> &core,
85 const std::vector<DiracSpinor> &excited,
92 const std::vector<DiracSpinor> &core,
93 const std::vector<DiracSpinor> &excited,
100 const std::vector<DiracSpinor> &core,
101 const std::vector<DiracSpinor> &excited,
Lookup table for Wigner 6J symbols.
Definition SixJTable.hpp:24
Base (pure virtual) class to store Coulomb integrals, and similar. 3 derived classes,...
Definition QkTable.hpp:57
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:41
Many-body perturbation theory.
Definition CI_Integrals.hpp:9
double e_bar(int kappa_v, const std::vector< DiracSpinor > &excited)
Returns energy of first state in excited that matches given kappa.
Definition Sigma2.cpp:26
double Sk_vwxy(int k, const DiracSpinor &v, const DiracSpinor &w, const DiracSpinor &x, const DiracSpinor &y, const Coulomb::QkTable &qk, const std::vector< DiracSpinor > &core, const std::vector< DiracSpinor > &excited, const Angular::SixJTable &SixJ, Denominators denominators)
Reduced two-body Sigma (2nd order correlation) operator. Sum of 6 diagrams.
Definition Sigma2.cpp:82
bool Sk_vwxy_SR(int k, const DiracSpinor &v, const DiracSpinor &w, const DiracSpinor &x, const DiracSpinor &y)
Selection rule for Sk_vwxy (differs from Qk_vwxy due to parity)
Definition Sigma2.cpp:35
std::pair< int, int > k_minmax_S(const DiracSpinor &v, const DiracSpinor &w, const DiracSpinor &x, const DiracSpinor &y)
Minimum/maximum k allowed by selectrion rules for Sk_vwxy. Cannot +=2.
Definition Sigma2.cpp:58
Denominators
Type of energy demoninators: Rayleigh-Schrodinger (RS), Brillouin-Wigner (BW). (not exact)
Definition Sigma2.hpp:11
std::pair< std::vector< DiracSpinor >, std::vector< DiracSpinor > > split_basis(const std::vector< DiracSpinor > &basis, double E_Fermi, int min_n_core, int max_n_excited)
Splits the basis into the core (holes) and excited states.
Definition Sigma2.cpp:10
double Sigma_vw(const DiracSpinor &v, const DiracSpinor &w, const CoulombIntegral &qk, const std::vector< DiracSpinor > &core, const std::vector< DiracSpinor > &excited, int max_l_internal=99, std::optional< double > ev=std::nullopt)
Matrix element of 1-body Sigma (2nd-order correlation) operator; de_v = <v|Sigma|v>.
Definition Sigma2.ipp:11
int number_below_Fermi(const DiracSpinor &i, const DiracSpinor &j, const DiracSpinor &k, const DiracSpinor &l, double eFermi)
Returns number of orbitals that are below Fermi level. Used for Qk selection.
Definition Sigma2.cpp:42