ampsci
High-precision calculations for one- and two-valence atomic systems
Loading...
Searching...
No Matches
MBPT::StructureRad

Calculates Structure Radiation + Normalisation of states, using diagram method. More...

#include <StructureRad.hpp>

Public Member Functions

 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={})
 
const std::vector< DiracSpinor > & core () const
 
const std::vector< DiracSpinor > & excited () const
 
const Coulomb::YkTableYk () const
 Returns reference to Yk table. NOTE: may not be initialised!
 
const std::optional< Coulomb::QkTable > & Qk () const
 
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, TB+dV}: second includes RPA (if dV given)
 
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 (if dV given)
 
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 includes RPA (if dV given).
 
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, SRN+dV}: second includes RPA (if dV given)
 
double f_root_scr (int k) const
 Effective screening factor for Coulomb lines.
 
double eta_hp (int k) const
 Effective hole-particle factor for polarisation loops.
 
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, N+dV}: second includes RPA (if dV given).
 
double Sigma_vw (const DiracSpinor &v, const DiracSpinor &w) const
 Calculates <v|Sigma|w>
 
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}
 

Detailed Description

Calculates Structure Radiation + Normalisation of states, using diagram method.

Three functions: srTB(), srC(), norm(). Structure radiation is sum of srTB()+srC(); norm() gives normalisation of states.

  • Typically, one should use splines for the 'legs' (outer states) of diagrams. However, code is written such that {w,v} (the valence states) always appear as the first state in the Q integrals; thus those states are always directly integrated (other states may use the existing y^k integrals, which were calculated using the spline states) * unless using QkTable (see below).
  • For using spline states as legs: This means you must typically ensure basis is large enough to make relevant valence states "physical"
  • The user should check if the zeroth order <w|t|v> matches closely between valence/spline states. If not, basis/cavity is too small and SR+N probably meaningless
  • Option to use QkTable to calculate SR+N. Otherwise, calculates Coulomb integrals on-the-fly. If QkTable is used, leads to ~10x speed-up, but uses large amount of memory. Also, using QkTable means spline states are used for "legs" of diagrams.
  • Formulas are presented in (for example): W. R. Johnson, Z. W. Liu, and J. Sapirstein, At. Data Nucl. Data Tables 64, 279 (1996). doi:10.1006/adnd.1996.0024

Constructor & Destructor Documentation

◆ StructureRad()

MBPT::StructureRad::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 = {} 
)

en_core: is defined such that states with e < en_core are in the core, while states with e > en_core are not. Typcially: en_core = max(e_core)-min(e_valence) = wf.FermiLevel(). nminmax is a pair{min, max}: we only used core states with n>=min, and only uses excited states with n<=nmax in the summations. Qk_fname is filename for QkTable - if given it will read/write QkTable to this file, and use QkTable to calculate SR. This ldeads to ~10x speedup in calculation, at cost of using much more memory

Member Function Documentation

◆ Yk()

const Coulomb::YkTable & MBPT::StructureRad::Yk ( ) const
inline

Returns reference to Yk table. NOTE: may not be initialised!

◆ srTB()

std::pair< double, double > MBPT::StructureRad::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, TB+dV}: second includes RPA (if dV given)

◆ srC()

std::pair< double, double > MBPT::StructureRad::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 (if dV given)

◆ norm()

std::pair< double, double > MBPT::StructureRad::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 includes RPA (if dV given).

◆ srn()

std::pair< double, double > MBPT::StructureRad::srn ( const DiracOperator::TensorOperator *const  h,
const DiracSpinor w,
const DiracSpinor v,
double  omega = 0.0,
const ExternalField::CorePolarisation *const  dV = nullptr 
) const
inline

Returns sum of SR+Norm diagrams, reduced ME: <w||T+B+C+N||v>. Returns a pair: {SRN, SRN+dV}: second includes RPA (if dV given)

◆ f_root_scr()

double MBPT::StructureRad::f_root_scr ( int  k) const
inline

Effective screening factor for Coulomb lines.

◆ eta_hp()

double MBPT::StructureRad::eta_hp ( int  k) const
inline

Effective hole-particle factor for polarisation loops.

◆ BO()

std::pair< double, double > MBPT::StructureRad::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, N+dV}: second includes RPA (if dV given).

from 10.1006/adnd.1996.0024

◆ Sigma_vw()

double MBPT::StructureRad::Sigma_vw ( const DiracSpinor v,
const DiracSpinor w 
) const

Calculates <v|Sigma|w>

◆ srn_table()

Coulomb::meTable< std::pair< double, double > > MBPT::StructureRad::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}


The documentation for this class was generated from the following files: