2#include "Coulomb/include.hpp"
3#include "Coulomb/meTable.hpp"
4#include "IO/FRW_fileReadWrite.hpp"
5#include "Wavefunction/DiracSpinor.hpp"
15class CorePolarisation;
106 std::pair<int, int> nminmax = {0, 999},
107 const std::string &Qk_fname =
"",
int k_cut = 99,
108 const std::vector<double> &fk = {},
109 const std::vector<double> &etak = {},
bool verbose =
true);
115 std::vector<double> m_root_fk;
117 std::vector<double> m_etak;
121 std::optional<Coulomb::QkTable> mQ{std::nullopt};
123 std::vector<DiracSpinor> mCore{}, mExcited{}, mBasis{};
132 const std::vector<DiracSpinor> &
core()
const {
return mCore; }
134 const std::vector<DiracSpinor> &
excited()
const {
return mExcited; }
136 const std::vector<DiracSpinor> &
basis()
const {
return mBasis; }
143 const std::optional<Coulomb::QkTable> &
Qk()
const {
return mQ; }
189 double omega = 0.0)
const {
190 return srTB(w, v, omega) + srC(w, v);
212 bool conj =
false)
const;
239 double omega = 0.0)
const {
240 const auto tb = srTB(w, v, omega);
241 const auto c = srC(w, v);
242 const auto n =
norm(w, v, h, dV, omega < 0.0);
248 const auto sk = std::size_t(k);
249 return sk < m_root_fk.size() ? m_root_fk[sk] : 1.0;
254 const auto sk = std::size_t(k);
255 return sk < m_etak.size() ? m_etak[sk] : 1.0;
285 double fv = 1.0)
const;
311 const std::vector<DiracSpinor> &as,
312 const std::vector<DiracSpinor> &tbs = {},
double omega = 0.0,
318 double omega = 0.0)
const;
356 bool transpose =
false)
const;
359 void check_solve_core()
const;
368 return m_use_Qk ? fk * mQ->Q(k, a, b, c, d) : fk * mY.
Q(k, a, b, c, d);
385 return Q(k, a, b, c, d) + P(k, a, b, c, d);
Calculates + stores Hartree Y functions + Angular (w/ look-up), taking advantage of symmetry.
Definition YkTable.hpp:46
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
General tensor operator (virtual base class); all single-particle (one-body) tenosor operators derive...
Definition TensorOperator.hpp:198
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:55
Virtual base class for core-polarisation (RPA); computes dV corrections.
Definition CorePolarisation.hpp:147
Structure Radiation and Normalisation of states, using diagram method.
Definition StructureRad.hpp:66
const std::vector< DiracSpinor > & core() const
const reference to employed subset of core orbitals
Definition StructureRad.hpp:132
const std::vector< DiracSpinor > & excited() const
const reference to employed subset of excited orbitals
Definition StructureRad.hpp:134
Coulomb::meTable< double > srn_table(const DiracOperator::TensorOperator *const h, const std::vector< DiracSpinor > &as, const std::vector< DiracSpinor > &tbs={}, double omega=0.0, const ExternalField::CorePolarisation *const dV=nullptr) const
Constructs an me table of srn() for each pair {a,b}.
Definition StructureRad.cpp:231
double f_root_scr(int k) const
Effective screening factor for each Coulomb line, sqrt(fk); 1 if not set.
Definition StructureRad.hpp:247
double f_norm(const DiracSpinor &v) const
Normalisation factor; defined: <w||h||v>_norm = <w||h||v>(f_v + f_w)
Definition StructureRad.hpp:215
double BO(const DiracSpinor &w, const DiracSpinor &v, double fw=1.0, double fv=1.0) const
Returns Brueckner orbital contribution to the reduced ME.
Definition StructureRad.cpp:787
double norm_factor(const DiracSpinor &w, const DiracSpinor &v) const
Normalisation factor for pair: <w||h||v>_norm = norm_factor(w,v) <w||h||v>
Definition StructureRad.cpp:221
double eta_hp(int k) const
Effective hole-particle factor for polarisation loops; 1 if not set.
Definition StructureRad.hpp:253
double norm(const DiracSpinor &w, const DiracSpinor &v, const DiracOperator::TensorOperator *const h, const ExternalField::CorePolarisation *const dV=nullptr, bool conj=false) const
Returns Normalisation of states, reduced ME: <w||h||v>_norm.
Definition StructureRad.cpp:208
const std::optional< Coulomb::QkTable > & Qk() const
const reference to underlying Qk table. Optional; may not be set
Definition StructureRad.hpp:143
double SR(const DiracSpinor &w, const DiracSpinor &v, double omega=0.0) const
Reduced matrix element of structure radiation, <w||h_sr||v>.
Definition StructureRad.hpp:188
double Sigma_vw(const DiracSpinor &v, const DiracSpinor &w) const
Second-order <v|Sigma|w>, at E = (e_v + e_w)/2 (fk and etak not applied)
Definition StructureRad.cpp:829
const Coulomb::meTable< double > & me_Table() const
const reference to underlying matrix element table. May be empty
Definition StructureRad.hpp:138
double srn(const DiracSpinor &w, const DiracSpinor &v, const DiracOperator::TensorOperator *const h, const ExternalField::CorePolarisation *const dV=nullptr, double omega=0.0) const
Returns sum of SR+Norm diagrams, reduced ME: <w||T+B+C+N||v>.
Definition StructureRad.hpp:236
const Coulomb::YkTable & Yk() const
const reference to Yk table (always formed by the constructor)
Definition StructureRad.hpp:141
const std::vector< DiracSpinor > & basis() const
const reference to employed subset of core+excited orbitals
Definition StructureRad.hpp:136
void solve_core(const DiracOperator::TensorOperator *const h, const ExternalField::CorePolarisation *const dV=nullptr, double omega=0.0)
Prepares the operator matrix elements required for SR and BO.
Definition StructureRad.cpp:94
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition Wavefunction.hpp:48
Dirac operators: TensorOperator base class and derived implementations for single-particle (one-body)...
Definition SecondOrder.hpp:7
Core-polarisation (RPA) corrections to matrix elements of an external field.
Definition MatrixElements.hpp:9
Many-body perturbation theory.
Definition MatrixElements.hpp:12