2 #include "HF/HartreeFock.hpp"
3 #include "MBPT/RDMatrix.hpp"
4 #include "Maths/Grid.hpp"
5 #include "Wavefunction/DiracSpinor.hpp"
20 struct FeynmanOptions {
23 int max_l_internal{6};
40 std::shared_ptr<const Grid> m_grid;
42 std::size_t m_i0, m_stride, m_subgrid_points;
60 bool m_include_higher_order_hp;
62 bool m_screen_Coulomb;
68 std::vector<ComplexGMatrix> m_qk{};
75 std::vector<ComplexGMatrix> m_pa{};
77 std::vector<GMatrix> m_Vx_kappa{};
80 std::vector<std::vector<ComplexGMatrix>> m_qpiq_wk{};
83 bool m_Complex_green_method =
false;
95 std::size_t size,
const FeynmanOptions &options,
int n_min_core,
98 bool screening()
const {
return m_screen_Coulomb; }
99 bool hole_particle()
const {
return m_hole_particle; }
102 std::size_t
stride()
const {
return m_stride; }
104 int n_min()
const {
return m_min_core_n; }
105 double omre()
const {
return m_omre; }
106 double w0()
const {
return m_wgrid.
r0(); }
107 double wratio()
const {
return m_wgrid.
r(1) / m_wgrid.
r(0); }
111 ComplexGMatrix
green(
int kappa, std::complex<double> en,
116 bool hole_particle)
const;
120 std::optional<int> k = {})
const;
140 Grid form_w_grid(
double w0,
double wratio)
const;
151 const std::complex<double> f)
const;
167 double om_imag)
const;
170 ComplexGMatrix green_core(
int kappa, std::complex<double> en)
const;
183 const double w)
const;
191 const std::complex<double> w)
const;
196 [[nodiscard]]
const ComplexGMatrix &get_dri()
const {
return m_dri; }
197 [[nodiscard]]
const ComplexGMatrix &get_drj()
const {
return m_drj; }
Stores radial Dirac spinor: F_nk = (f, g)
Definition: DiracSpinor.hpp:41
Holds grid, including type + Jacobian (dr/du)
Definition: Grid.hpp:31
auto r0() const
Minium (first) grid point.
Definition: Grid.hpp:58
const std::vector< double > & r() const
Grid points, r.
Definition: Grid.hpp:75
Solves relativistic Hartree-Fock equations for core and valence. Optionally includes Breit and QED ef...
Definition: HartreeFock.hpp:70
Class to construct Feynman diagrams, Green's functions and polarisation op.
Definition: Feynman.hpp:35
const GMatrix & get_Vx_kappa(int kappa) const
Returns (ref to) radial exchange matrix Vx_kappa. Nb: includes dri*drj.
Definition: Feynman.hpp:126
ComplexGMatrix polarisation_k(int k, std::complex< double > omega, bool hole_particle) const
Polarisation operator pi^k(w), for multipolarity k.
Definition: Feynman.cpp:462
ComplexGMatrix green(int kappa, std::complex< double > en, GreenStates states) const
Calculates Green's function for kappa, and complex energy.
Definition: Feynman.cpp:205
std::size_t stride() const
Returns stride used for sub-grid.
Definition: Feynman.hpp:102
Feynman(const HF::HartreeFock *vHF, std::size_t i0, std::size_t stride, std::size_t size, const FeynmanOptions &options, int n_min_core, bool verbose=true)
Construct Feynman diagram.
Definition: Feynman.cpp:15
GMatrix Sigma_direct(int kappa_v, double en_v, std::optional< int > k={}) const
Calculate Direct part of correlation potential.
Definition: Feynman.cpp:591
const ComplexGMatrix & get_qk(int k) const
Returns (reference to) q^k (radial) matrix. Note: includes drj.
Definition: Feynman.hpp:123
constexpr int lFromIndex(int i)
returns l, given kappa_index
Definition: Wigner369j.hpp:59
constexpr int indexFromKappa(int ka)
returns kappa_index, given kappa
Definition: Wigner369j.hpp:49
Many-body perturbation theory.
Definition: CI_Integrals.hpp:9
GreenStates
Which states to include in Green's function:
Definition: Feynman.hpp:31
Screening
Options for including Screening.
Definition: Feynman.hpp:18
HoleParticle
Options for including hole-particle interaction. include mean all k; include_k0 means k=0 term only.
Definition: Feynman.hpp:15