2#include "HF/HartreeFock.hpp"
3#include "MBPT/RadialMatrix.hpp"
4#include "MBPT/SpinorMatrix.hpp"
5#include "Maths/Grid.hpp"
6#include "Wavefunction/DiracSpinor.hpp"
92 std::shared_ptr<const Grid> m_grid;
94 std::size_t m_i0, m_stride, m_subgrid_points;
97 std::size_t m_max_ki_core;
117 std::vector<double> m_wgrid_points{};
118 std::vector<double> m_wgrid_weights{};
121 bool m_hole_particle;
123 bool m_include_higher_order_hp;
125 bool m_screen_Coulomb;
129 std::vector<ComplexRMatrix> m_qk{};
132 std::vector<ComplexGMatrix> m_pa{};
134 std::vector<ComplexGMatrix> m_Pcore{};
136 std::vector<GMatrix> m_Vx_kappa{};
144 bool m_Complex_green_method;
174 bool include_G,
bool verbose =
true,
const std::string &ident =
"",
175 bool form_qpq =
true);
183 std::size_t
stride()
const {
return m_stride; }
186 int n_min()
const {
return m_min_core_n; }
188 int max_k()
const {
return m_max_k; }
190 double omre()
const {
return m_omre; }
192 double w0()
const {
return m_w0; }
194 double wratio()
const {
return m_wratio; }
244 const std::vector<DiracSpinor> &basis)
const;
287 void form_qpiq(
const std::string &ident =
"");
300 void form_qpiq(
const std::vector<std::vector<ComplexRMatrix>> &pi_wk);
303 bool has_qpiq()
const {
return m_qpiq_wk.size() != 0; }
310 bool read_qpiq(
const std::string &ident);
331 std::optional<int> k = {})
const;
379 void form_w_quadrature(
double w0,
double wratio);
382 std::string qpiq_filename(
const std::string &ident)
const;
384 bool readwrite_qpiq(IO::FRW::RoW rw,
const std::string &fname);
393 const std::complex<double> f)
const;
405 green_hf_complex_dirac(
int kappa, std::complex<double> en,
410 double om_imag)
const;
413 ComplexGMatrix green_core(
int kappa, std::complex<double> en)
const;
434 const double w)
const;
442 const std::complex<double> w)
const;
477double best_omre(
const std::vector<DiracSpinor> &core,
478 const std::vector<DiracSpinor> &valence,
bool print =
false);
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:55
Solves relativistic Hartree-Fock equations for core and valence. Optionally includes Breit and QED ef...
Definition HartreeFock.hpp:114
Row-major dense matrix with arithmetic and linear algebra support.
Definition Matrix.hpp:208
Direct correlation potential diagrams via the Feynman technique.
Definition Feynman.hpp:87
std::vector< GMatrix > Sigma_direct_each_k(int kappa_v, double en_v) const
Direct part of correlation potential, for each multipole k.
Definition Feynman.cpp:1170
std::vector< ComplexRMatrix > polarisation_each_k(std::complex< double > omega, bool hole_particle) const
Polarisation operator pi^k(w), for each k = 0..max_k separately.
Definition Feynman.cpp:691
std::vector< std::vector< ComplexRMatrix > > polarisation_wk() const
Polarisation operator pi^k(w) on the frequency grid, for each k.
Definition Feynman.cpp:1081
std::size_t stride() const
Returns stride used for sub-grid.
Definition Feynman.hpp:183
bool screening() const
True if Coulomb screening is included.
Definition Feynman.hpp:178
bool hole_particle() const
True if hole-particle interaction is included.
Definition Feynman.hpp:180
ComplexGMatrix green(int kappa, std::complex< double > en, GreenStates states=GreenStates::both) const
Green's function for given kappa, at complex energy en.
Definition Feynman.cpp:252
bool read_qpiq(const std::string &ident)
Reads Q*Pi*Q from the disk cache for ident (file prefix).
Definition Feynman.cpp:953
const ComplexRMatrix & get_qk(int k) const
Returns (reference to) radial Coulomb matrix, q^k.
Definition Feynman.hpp:351
int lmax() const
Maximum l for internal lines.
Definition Feynman.hpp:196
double w0() const
First non-zero point of the frequency grid along Im(w)
Definition Feynman.hpp:192
const ComplexGMatrix & get_Pcore(int kappa) const
Returns (ref to) summed core projection operator, for given kappa.
Definition Feynman.hpp:364
GMatrix Sigma_direct(int kappa_v, double en_v, std::optional< int > k={}) const
Direct part of the correlation potential, for kappa_v at en_v.
Definition Feynman.cpp:1147
int n_min() const
Minimum n of core states in the polarisation loop.
Definition Feynman.hpp:186
double omre() const
Real part of frequency used for integration.
Definition Feynman.hpp:190
bool has_qpiq() const
True once Q*Pi*Q has been formed.
Definition Feynman.hpp:303
ComplexGMatrix green_dyson(int kappa, std::complex< double > en) const
Green's function by the Dyson (resolvent) method.
Definition Feynman.cpp:281
ComplexGMatrix green_basis(int kappa, std::complex< double > en, const std::vector< DiracSpinor > &basis) const
Green's function for given kappa, as a sum over an explicit basis.
Definition Feynman.cpp:484
const GMatrix & get_Vx_kappa(int kappa) const
Returns (ref to) radial exchange matrix Vx_kappa. Nb: includes dri*drj.
Definition Feynman.hpp:354
ComplexGMatrix green_complex_dirac(int kappa, std::complex< double > en) const
Green's function, solving the Dirac equation directly at complex en.
Definition Feynman.cpp:275
void form_qpiq(const std::string &ident="")
Forms Q*Pi*Q along the frequency grid (required by Sigma_direct).
Definition Feynman.cpp:1073
bool write_qpiq(const std::string &ident)
Writes Q*Pi*Q to the disk cache for ident; false if not written.
Definition Feynman.cpp:959
double wratio() const
Ratio of the logarithmic frequency grid along Im(w)
Definition Feynman.hpp:194
int max_k() const
Maximum multipolarity, k.
Definition Feynman.hpp:188
Radial matrix: stored on a sub-grid (defined by i0, stride, size).
Definition RadialMatrix.hpp:26
Radial Dirac spinor matrix.
Definition SpinorMatrix.hpp:57
constexpr std::uint64_t kappa_to_kindex(int ka)
returns kappa_index, given kappa
Definition Wigner369j.hpp:98
constexpr int kindex_to_l(std::uint64_t i)
returns l, given kappa_index
Definition Wigner369j.hpp:116
Many-body perturbation theory.
Definition MatrixElements.hpp:12
double w_ratio
Ratio for the logarithmic frequency grid along Im(w)
Definition Feynman.hpp:47
double best_omre(const std::vector< DiracSpinor > &core, const std::vector< DiracSpinor > &valence, bool print)
Best real part of the frequency, omre, for the direct diagram.
Definition Feynman.cpp:826
GreenStates
Which states to include in the Green's function.
Definition Feynman.hpp:67
double omre
Real part of the frequency, for integration along Im(w) (see best_omre)
Definition Feynman.hpp:36
HoleParticle hole_particle
Include hole-particle interaction in the polarisation operator.
Definition Feynman.hpp:32
Screening
Options for including Screening.
Definition Feynman.hpp:25
bool complex_green
Method for the Green's function at complex energy.
Definition Feynman.hpp:56
Screening screening
Include all-order screening of the Coulomb interaction.
Definition Feynman.hpp:30
int max_l_internal
Maximum l for internal lines (at least the maximum l in the core)
Definition Feynman.hpp:34
double w0
First non-zero point of the frequency grid along Im(w).
Definition Feynman.hpp:45
HoleParticle
Options for including the hole-particle interaction.
Definition Feynman.hpp:22
Options for the Feynman method (see Feynman)
Definition Feynman.hpp:28