2#include "Angular/SixJTable.hpp"
3#include "Coulomb/QkTable.hpp"
4#include "Wavefunction/DiracSpinor.hpp"
5#include "qip/String.hpp"
73 double ei_bar,
double ei,
double es,
double E0);
93std::pair<std::vector<DiracSpinor>, std::vector<DiracSpinor>>
94split_basis(
const std::vector<DiracSpinor> &basis,
double E_Fermi,
95 int min_n_core = 1,
int max_n_excited = 999);
158 const std::vector<DiracSpinor> &excited,
161 const std::vector<double> &fk = {},
double E0 = 0.0);
184std::pair<int, int>
k_minmax_S(
int twoj_v,
int twoj_w,
int twoj_x,
int twoj_y);
209template <
class CoulombIntegral>
211 const CoulombIntegral &qk,
const std::vector<DiracSpinor> &core,
212 const std::vector<DiracSpinor> &excited,
213 int max_l_internal = 99,
214 std::optional<double> ev = std::nullopt);
223template <
class CoulombIntegral>
226 const std::vector<DiracSpinor> &core,
const std::vector<DiracSpinor> &excited,
227 int max_l_internal = 99, std::optional<double> ev = std::nullopt);
244template <
class CoulombIntegral>
246 const CoulombIntegral &qk,
247 const std::vector<DiracSpinor> &core,
248 const std::vector<DiracSpinor> &excited,
double ev,
249 int max_l_internal = 99,
double delta = 0.01);
266double e_bar(
int kappa_v,
const std::vector<DiracSpinor> &excited);
296 const std::string &filename,
const std::vector<DiracSpinor> &external,
297 const std::vector<DiracSpinor> &core,
const std::vector<DiracSpinor> &excited,
299 Denominators denominators,
bool no_new_integrals =
false,
300 const std::vector<double> &fk = {},
double E0 = 0.0);
319 const std::vector<DiracSpinor> &external,
350 const std::vector<DiracSpinor> &core,
351 const std::vector<DiracSpinor> &excited,
353 const std::vector<double> &fk = {},
double E0 = 0.0);
376 const std::vector<DiracSpinor> &core,
377 const std::vector<DiracSpinor> &excited,
379 const std::vector<double> &fk = {},
double E0 = 0.0);
402 const std::vector<DiracSpinor> &core,
403 const std::vector<DiracSpinor> &excited,
405 const std::vector<double> &fk = {},
double E0 = 0.0);
428 const std::vector<DiracSpinor> &core,
429 const std::vector<DiracSpinor> &excited,
431 const std::vector<double> &fk = {},
double E0 = 0.0);
Lookup table for Wigner 6j symbols.
Definition SixJTable.hpp:82
Base class template to store Coulomb integrals, and similar. 3 specific cases (by template instantiat...
Definition QkTable.hpp:118
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:44
double S_Sigma2_ab(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, const std::vector< double > &fk={}, double E0=0.0)
Diagrams a+b contribution to the reduced two-body Sigma.
Definition Sigma2.cpp:146
double S_Sigma2_c2(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, const std::vector< double > &fk={}, double E0=0.0)
Diagram c2 contribution to the reduced two-body Sigma.
Definition Sigma2.cpp:304
double S_Sigma2_c1(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, const std::vector< double > &fk={}, double E0=0.0)
Diagram c1 contribution to the reduced two-body Sigma.
Definition Sigma2.cpp:231
double S_Sigma2_d(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, const std::vector< double > &fk={}, double E0=0.0)
Diagram d contribution to the reduced two-body Sigma.
Definition Sigma2.cpp:377
Many-body perturbation theory.
Definition MatrixElements.hpp:12
std::string parse_Denominators(Denominators d)
Returns string representation of Denominators enum.
Definition Sigma2.cpp:12
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, const std::vector< double > &fk, double E0)
Reduced two-body Sigma (2nd-order correlation) operator matrix element.
Definition Sigma2.cpp:122
double e_bar(int kappa_v, const std::vector< DiracSpinor > &excited)
Returns energy of first excited state matching a given .
Definition Sigma2.cpp:84
bool Sk_vwxy_SR(int k, const DiracSpinor &v, const DiracSpinor &w, const DiracSpinor &x, const DiracSpinor &y)
Selection rule for .
Definition Sigma2.cpp:97
std::pair< int, int > k_minmax_S(const DiracSpinor &v, const DiracSpinor &w, const DiracSpinor &x, const DiracSpinor &y)
Minimum and maximum allowed by selection rules for .
Definition Sigma2.cpp:104
double leg_de(Denominators denominators, double et_bar, double et, double ei_bar, double ei, double es, double E0)
External-leg part of a Sigma_2 energy denominator (diagrams a, b, c1, c2).
Definition Sigma2.cpp:48
Denominators
Type of energy denominators: DFK, BW, RS, Fermi, Fermi0.
Definition Sigma2.hpp:27
double dSigma_dE_vw(const DiracSpinor &v, const DiracSpinor &w, const CoulombIntegral &qk, const std::vector< DiracSpinor > &core, const std::vector< DiracSpinor > &excited, double ev, int max_l_internal=99, double delta=0.01)
Energy derivative of the one-body correlation correction, , evaluated at E = ev.
Definition Sigma2.ipp:104
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:68
std::vector< double > average_hk(const Coulomb::LkTable &Sk, const Coulomb::QkTable &qk, const std::vector< DiracSpinor > &external, int max_k)
Average Sigma_2 correction ratios, h_k, for each multipole k.
Definition Sigma2.cpp:519
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 the 1-body Sigma (2nd-order correlation) operator.
Definition Sigma2.ipp:93
std::pair< double, double > Sigma_vw_direct_exchange(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)
Direct and exchange parts of , returned separately as {direct, exchange}.
Definition Sigma2.ipp:12
Coulomb::LkTable calculate_Sk(const std::string &filename, const std::vector< DiracSpinor > &external, const std::vector< DiracSpinor > &core, const std::vector< DiracSpinor > &excited, const Coulomb::QkTable &qk, int max_k, bool exclude_wrong_parity_box, Denominators denominators, bool no_new_integrals, const std::vector< double > &fk, double E0)
Calculates (or reads in) a table of two-body Sigma_2 matrix elements.
Definition Sigma2.cpp:469