2#include "Coulomb/include.hpp"
3#include "Coulomb/meTable.hpp"
4#include "IO/FRW_fileReadWrite.hpp"
5#include "Wavefunction/DiracSpinor.hpp"
15class CorePolarisation;
87 std::pair<int, int> nminmax = {0, 999},
88 const std::string &Qk_fname =
"",
int k_cut = 99,
89 const std::vector<double> &fk = {},
90 const std::vector<double> &etak = {},
bool verbose =
true);
96 std::vector<double> m_root_fk;
98 std::vector<double> m_etak;
102 std::optional<Coulomb::QkTable> mQ{std::nullopt};
104 std::vector<DiracSpinor> mCore{}, mExcited{}, mBasis{};
113 const std::vector<DiracSpinor> &
core()
const {
return mCore; }
115 const std::vector<DiracSpinor> &
excited()
const {
return mExcited; }
117 const std::vector<DiracSpinor> &
basis()
const {
return mBasis; }
124 const std::optional<Coulomb::QkTable> &
Qk()
const {
return mQ; }
143 double omega = 0.0)
const {
144 return srTB(w, v, omega) + srC(w, v);
160 double omega = 0.0)
const {
161 const auto tb = srTB(w, v, omega);
162 const auto c = srC(w, v);
163 const auto n =
norm(w, v, h, dV);
169 const auto sk = std::size_t(k);
170 return sk < m_root_fk.size() ? m_root_fk[sk] : 1.0;
175 const auto sk = std::size_t(k);
176 return sk < m_etak.size() ? m_etak[sk] : 1.0;
183 double fv = 1.0)
const;
191 const std::vector<DiracSpinor> &as,
192 const std::vector<DiracSpinor> &tbs = {},
double omega = 0.0,
198 double omega = 0.0)
const;
236 bool transpose =
false)
const;
243 return m_use_Qk ? fk * mQ->Q(k, a, b, c, d) : fk * mY.
Q(k, a, b, c, d);
249 return m_use_Qk ? mQ->P2(k, a, b, c, d, mY.
SixJ(), m_root_fk) :
250 mY.P2(k, a, b, c, d, m_root_fk);
256 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:26
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: Yk and Ck tables must include all required value...
Definition YkTable.cpp:127
const Angular::SixJTable & SixJ() const
Returns a (const ref) to SixJ table [see Angular::SixJTable].
Definition YkTable.hpp:58
General operator (virtual base class); operators derive from this.
Definition TensorOperator.hpp:65
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:42
Virtual Core Polarisation class, for <a||dV||b>. See TDHF, DiagramRPA, etc.
Definition CorePolarisation.hpp:35
Calculates Structure Radiation + Normalisation of states, using diagram method.
Definition StructureRad.hpp:65
const std::vector< DiracSpinor > & core() const
const reference to employed subset of core orbitals
Definition StructureRad.hpp:113
const std::vector< DiracSpinor > & excited() const
const reference to employed subset of excited orbitals
Definition StructureRad.hpp:115
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, srn+dv} for each pair or {a,b}
Definition StructureRad.cpp:211
double f_root_scr(int k) const
Effective screening factor for Coulomb lines.
Definition StructureRad.hpp:168
double f_norm(const DiracSpinor &v) const
Normalisation factor; defined: <w||h||v>_norm = <w||h||v>(f_v + f_w)
Definition StructureRad.hpp:153
double norm(const DiracSpinor &w, const DiracSpinor &v, const DiracOperator::TensorOperator *const h, const ExternalField::CorePolarisation *const dV=nullptr) const
Returns Normalisation of states, reduced ME: <w||h||v>_norm.
Definition StructureRad.cpp:195
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: <w||h||v>_norm. Returns a pair: {N,...
Definition StructureRad.cpp:766
double eta_hp(int k) const
Effective hole-particle factor for polarisation loops.
Definition StructureRad.hpp:174
const std::optional< Coulomb::QkTable > & Qk() const
const reference to underlying Qk table. Optional; may not be set
Definition StructureRad.hpp:124
void solve_core(const DiracOperator::TensorOperator *const h, const ExternalField::CorePolarisation *const dV=nullptr)
Prepares.
Definition StructureRad.cpp:83
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:142
double Sigma_vw(const DiracSpinor &v, const DiracSpinor &w) const
Calculates <v|Sigma|w>
Definition StructureRad.cpp:777
const Coulomb::meTable< double > & me_Table() const
const reference to underlying matrix element table. May be empty
Definition StructureRad.hpp:119
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:157
const Coulomb::YkTable & Yk() const
const reference to Yk table. NOTE: may not be initialised!
Definition StructureRad.hpp:122
const std::vector< DiracSpinor > & basis() const
const reference to employed subset of core+excited orbitals
Definition StructureRad.hpp:117
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition Wavefunction.hpp:37
Dirac Operators: General + derived.
Definition GenerateOperator.cpp:3
Calculates many-body corrections (RPA) to matrix elements of external field.
Definition calcMatrixElements.cpp:14
Many-body perturbation theory.
Definition CI_Integrals.hpp:9