2 #include "Coulomb/Coulomb.hpp"
3 #include "Coulomb/meTable.hpp"
4 #include "IO/FRW_fileReadWrite.hpp"
5 #include "Wavefunction/DiracSpinor.hpp"
14 class CorePolarisation;
65 StructureRad(
const std::vector<DiracSpinor> &basis,
double en_core,
66 std::pair<int, int> nminmax = {0, 999},
67 const std::string &Qk_fname =
"",
68 const std::vector<double> &fk = {},
69 const std::vector<double> &etak = {});
73 std::vector<double> m_root_fk;
74 std::vector<double> m_etak;
76 std::optional<Coulomb::QkTable> mQ{std::nullopt};
78 std::vector<DiracSpinor> mCore{}, mExcited{};
81 const std::vector<DiracSpinor> &core()
const {
return mCore; }
82 const std::vector<DiracSpinor> &excited()
const {
return mExcited; }
85 const std::optional<Coulomb::QkTable> &Qk()
const {
return mQ; }
89 std::pair<double, double>
96 std::pair<double, double>
103 std::pair<double, double>
110 std::pair<double, double>
114 const auto [tb, dvtb] =
srTB(h, w, v, omega, dV);
115 const auto [c, dvc] =
srC(h, w, v, dV);
116 const auto [n, dvn] =
norm(h, w, v, dV);
117 return {tb + c + n, dvtb + dvc + dvn};
122 const auto sk = std::size_t(k);
123 return sk < m_root_fk.size() ? m_root_fk[sk] : 1.0;
128 const auto sk = std::size_t(k);
129 return sk < m_etak.size() ? m_etak[sk] : 1.0;
135 std::pair<double, double>
139 double fv = 1.0)
const;
144 const std::vector<DiracSpinor> &as,
145 const std::vector<DiracSpinor> &tbs = {},
double omega = 0.0,
181 std::pair<double, double>
191 return m_use_Qk ? fk * mQ->Q(k, a, b, c, d) : fk * mY.
Q(k, a, b, c, d);
197 return m_use_Qk ? mQ->P2(k, a, b, c, d, mY.
SixJ(), m_root_fk) :
198 mY.P2(k, a, b, c, d, m_root_fk);
204 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:110
Stores radial Dirac spinor: F_nk = (f, g)
Definition: DiracSpinor.hpp:41
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:52
std::pair< double, double > srTB(const DiracOperator::TensorOperator *const h, const DiracSpinor &w, const DiracSpinor &v, double omega=0.0, const ExternalField::CorePolarisation *const dV=nullptr) const
Returns sum of Top+Bottom (SR) diagrams, reduced ME: <w||T+B||v>. Returns a pair: {TB,...
Definition: StructureRad.cpp:60
double f_root_scr(int k) const
Effective screening factor for Coulomb lines.
Definition: StructureRad.hpp:121
std::pair< double, double > BO(const DiracOperator::TensorOperator *const h, const DiracSpinor &w, const DiracSpinor &v, const ExternalField::CorePolarisation *const dV=nullptr, 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:750
StructureRad(const std::vector< DiracSpinor > &basis, double en_core, std::pair< int, int > nminmax={0, 999}, const std::string &Qk_fname="", const std::vector< double > &fk={}, const std::vector< double > &etak={})
Definition: StructureRad.cpp:17
double eta_hp(int k) const
Effective hole-particle factor for polarisation loops.
Definition: StructureRad.hpp:127
std::pair< double, double > srn(const DiracOperator::TensorOperator *const h, const DiracSpinor &w, const DiracSpinor &v, double omega=0.0, const ExternalField::CorePolarisation *const dV=nullptr) const
Returns sum of SR+Norm diagrams, reduced ME: <w||T+B+C+N||v>. Returns a pair: {SRN,...
Definition: StructureRad.hpp:111
Coulomb::meTable< std::pair< double, 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:199
std::pair< double, double > norm(const DiracOperator::TensorOperator *const h, const DiracSpinor &w, const DiracSpinor &v, const ExternalField::CorePolarisation *const dV=nullptr) const
Returns Normalisation of states, reduced ME: <w||h||v>_norm. Returns a pair: {N, N+dV}: second includ...
Definition: StructureRad.cpp:182
std::pair< double, double > srC(const DiracOperator::TensorOperator *const h, const DiracSpinor &w, const DiracSpinor &v, const ExternalField::CorePolarisation *const dV=nullptr) const
Returns Centre (SR) diagrams, reduced ME: <w||C||v>. Returns a pair: {C, C+dV}: second includes RPA (...
Definition: StructureRad.cpp:110
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition: Wavefunction.hpp:36
Dirac Operators: General + derived.
Definition: GenerateOperator.cpp:12
Calculates many-body corrections (RPA) to matrix elements of external field.
Definition: calcMatrixElements.cpp:14
Many-body perturbation theory.
Definition: CI_Integrals.hpp:9