ampsci
c++ program for high-precision atomic structure calculations of single-valence systems
|
Calculates many-body corrections (RPA) to matrix elements of external field. More...
Classes | |
struct | MEdata |
Small struct to store calculated matrix elements. More... | |
class | CorePolarisation |
Virtual Core Polarisation class, for <a||dV||b>. See TDHF, DiagramRPA, etc. More... | |
class | DiagramRPA |
RPA correction to matrix elements, using Diagram technique. More... | |
class | DiagramRPA0_jL |
RPA correction to matrix elements, using Diagram technique. More... | |
class | TDHF |
Uses time-dependent Hartree-Fock method to include core-polarisation (RPA) corrections to matrix elements of some external field operator. More... | |
class | TDHFbasis |
Similar to the time-dependent Hartree-Fock method, but expands dPsi corrections using a basis to include core-polarisation (RPA) corrections to matrix elements of some external field operator. More... | |
Enumerations | |
enum class | Method { TDHF , basis , diagram , none , Error } |
enum class | dPsiType { X , Y } |
enum class | StateType { bra , ket } |
Functions | |
std::vector< MEdata > | calcMatrixElements (const std::vector< DiracSpinor > &b_orbs, const std::vector< DiracSpinor > &a_orbs, DiracOperator::TensorOperator *const h, CorePolarisation *const dV, double omega, bool each_freq, bool diagonal, bool off_diagonal, bool calculate_both) |
Coulomb::meTable< double > | me_table (const std::vector< DiracSpinor > &a_orbs, const std::vector< DiracSpinor > &b_orbs, const DiracOperator::TensorOperator *h, const CorePolarisation *dV=nullptr, const MBPT::StructureRad *srn=nullptr, std::optional< double > omega={}) |
Fills me_table with MEs, <a||h||b> and <b||h||a>. Required to set omega for freq. dependent operators initially. | |
std::unique_ptr< CorePolarisation > | make_rpa (const std::string &method, const DiracOperator::TensorOperator *h, const HF::HartreeFock *vhf, bool print, const std::vector< DiracSpinor > &basis, const std::string &identity) |
std::vector< MEdata > | calcMatrixElements (const std::vector< DiracSpinor > &orbs, DiracOperator::TensorOperator *const h, CorePolarisation *const dV=nullptr, double omega=0.0, bool each_freq=false, bool diagonal=true, bool off_diagonal=true, bool calculate_both=false) |
Coulomb::meTable< double > | me_table (const std::vector< DiracSpinor > &a_orbs, const DiracOperator::TensorOperator *h, const CorePolarisation *dV=nullptr, const MBPT::StructureRad *srn=nullptr, std::optional< double > omega={}) |
Fills me_table with MEs. Required to set omega for freq. dependent operators initially. | |
Method | ParseMethod (std::string_view str) |
DiracSpinor | solveMixedState (const DiracSpinor &Fa, double omega, const std::vector< double > &vl, double alpha, const std::vector< DiracSpinor > &core, const DiracSpinor &Fs, double eps_target=1.0e-9, const MBPT::CorrelationPotential *const Sigma=nullptr, const HF::Breit *const VBr=nullptr, const std::vector< double > &H_mag={}) |
Solves Mixed States (TDHF) equation, inhomogenous equation, with Hartree-Fock Hamiltonian, including exchange. More... | |
void | solveMixedState (DiracSpinor &dF, const DiracSpinor &Fa, double omega, const std::vector< double > &vl, double alpha, const std::vector< DiracSpinor > &core, const DiracSpinor &Fs, double eps_target=1.0e-9, const MBPT::CorrelationPotential *const Sigma=nullptr, const HF::Breit *const VBr=nullptr, const std::vector< double > &H_mag={}) |
Solves Mixed States (TDHF) equation, inhomogenous equation, staring from existing approximate solition, dF. More... | |
DiracSpinor | solveMixedState (const DiracSpinor &Fa, double omega, const DiracSpinor &Fs, const HF::HartreeFock *const hf, double eps_target=1.0e-9, const MBPT::CorrelationPotential *const Sigma=nullptr) |
Solves Mixed States (TDHF) equation. Overload; takes hf object. | |
void | solveMixedState (DiracSpinor &dF, const DiracSpinor &Fa, double omega, const DiracSpinor &Fs, const HF::HartreeFock *const hf, double eps_target=1.0e-9, const MBPT::CorrelationPotential *const Sigma=nullptr) |
Solves Mixed States (TDHF) equation. Overload; takes hf object. | |
DiracSpinor | solveMixedState_basis (const DiracSpinor &Fa, const DiracSpinor &hFa, double omega, const std::vector< DiracSpinor > &basis) |
Directly findes dF = \sum_n |n><n|hFa> / (ea - en + omega) - mainly for tests. | |
Variables | |
constexpr bool | print_final_eps = false |
constexpr bool | print_each_eps = false |
Calculates many-body corrections (RPA) to matrix elements of external field.
External field: Mixed-states + Core Polarisation.
DiracSpinor ExternalField::solveMixedState | ( | const DiracSpinor & | Fa, |
double | omega, | ||
const std::vector< double > & | vl, | ||
double | alpha, | ||
const std::vector< DiracSpinor > & | core, | ||
const DiracSpinor & | Fs, | ||
double | eps_target = 1.0e-9 , |
||
const MBPT::CorrelationPotential *const | Sigma = nullptr , |
||
const HF::Breit *const | VBr = nullptr , |
||
const std::vector< double > & | H_mag = {} |
||
) |
Solves Mixed States (TDHF) equation, inhomogenous equation, with Hartree-Fock Hamiltonian, including exchange.
Solves
\[ (H_{\rm HF} - \epsilon - \omega)\delta\phi + F_S = 0 \]
for \(\delta\phi\) (dF). Typically
\[ F_S = (\hat h + \delta V_h - \delta \varepsilon) \phi. \]
Requires unperturbed orbital, Fa, a local potential (vl = vnuc + vdir), set of core electrons (for exchange). kappa (Dirac Q. number) of solution will have that of Fs. Note sign on hFa (this is \(\hat h \phi\), not \(-\hat h \phi\)). eps_target is convergance goal for solving the inhomogenous dif. equation. Can optionally include Sigma (correlations), Breit, and Magnetic part of QED radiative potential (electric part should be included in vl).
void ExternalField::solveMixedState | ( | DiracSpinor & | dF, |
const DiracSpinor & | Fa, | ||
double | omega, | ||
const std::vector< double > & | vl, | ||
double | alpha, | ||
const std::vector< DiracSpinor > & | core, | ||
const DiracSpinor & | Fs, | ||
double | eps_target = 1.0e-9 , |
||
const MBPT::CorrelationPotential *const | Sigma = nullptr , |
||
const HF::Breit *const | VBr = nullptr , |
||
const std::vector< double > & | H_mag = {} |
||
) |
Solves Mixed States (TDHF) equation, inhomogenous equation, staring from existing approximate solition, dF.
As above [solveMixedState], but starts with existing solution dF (may be 'zero'). If the existing solution is already approximate solution, this allows equation to be solved much quicker.