ampsci
c++ program for high-precision atomic structure calculations of single-valence systems
|
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...
#include <TDHFbasis.hpp>
Inherits ExternalField::TDHF.
Public Member Functions | |
TDHFbasis (const DiracOperator::TensorOperator *const h, const HF::HartreeFock *const hf, const std::vector< DiracSpinor > &basis) | |
virtual void | solve_core (const double omega, int max_its=100, const bool print=true) override final |
Solves TDHF equations self-consistantly for core electrons at frequency omega, using basis expansion. More... | |
virtual Method | method () const override final |
Returns RPA method. | |
delta epsilon psi f delta epsilon Psi f DiracSpinor | form_dPsi (const DiracSpinor &Fv, const double omega, dPsiType XorY, const int kappa_beta, const std::vector< DiracSpinor > &spectrum, StateType st=StateType::ket, bool incl_dV=true) const |
Forms \delta Psi_v for valence state Fv (including core pol.) - 1 kappa. More... | |
std::vector< DiracSpinor > | form_dPsis (const DiracSpinor &Fv, const double omega, dPsiType XorY, const std::vector< DiracSpinor > &spectrum, StateType st=StateType::ket, bool incl_dV=true) const |
Forms \delta Psi_v for valence state Fv for all kappas (see form_dPsi) More... | |
TDHFbasis & | operator= (const TDHFbasis &)=delete |
TDHFbasis (const TDHFbasis &)=default | |
Public Member Functions inherited from ExternalField::TDHF | |
TDHF (const DiracOperator::TensorOperator *const h, const HF::HartreeFock *const hf) | |
Contruct TDHF operator: takes pointer to operator and to HF object. | |
virtual void | clear () override final |
Clears the dPsi orbitals (sets to zero) | |
double | dV (const DiracSpinor &Fa, const DiracSpinor &Fb, bool conj) const |
Calculate reduced matrix element <a||dV||b> or <a||dV*||b>. Will exclude orbital 'Fexcl' from sum over core (for tests only) | |
virtual double | dV (const DiracSpinor &Fa, const DiracSpinor &Fb) const override final |
As above, but automatically determines if 'conjugate' version required (Based on sign of [en_a-en_b]) | |
DiracSpinor | dV_rhs (const int kappa_n, const DiracSpinor &Fm, bool conj=false) const |
Returns "reduced partial matrix element RHS": dV||Fb}. Note: Fa * dV_rhs(..) equiv to dV(..) | |
const std::vector< DiracSpinor > & | get_dPsis (const DiracSpinor &Fc, dPsiType XorY) const |
Returns const ref to dPsi orbitals for given core orbital Fc. | |
const DiracSpinor & | get_dPsi_x (const DiracSpinor &Fc, dPsiType XorY, const int kappa_x) const |
Returns const reference to dPsi orbital of given kappa. | |
DiracSpinor | solve_dPsi (const DiracSpinor &Fv, const double omega, dPsiType XorY, const int kappa_beta, const MBPT::CorrelationPotential *const Sigma=nullptr, StateType st=StateType::ket, bool incl_dV=true) const |
Forms \delta Psi_v for valence state Fv (including core pol.) - 1 kappa. More... | |
std::vector< DiracSpinor > | solve_dPsis (const DiracSpinor &Fv, const double omega, dPsiType XorY, const MBPT::CorrelationPotential *const Sigma=nullptr, StateType st=StateType::ket, bool incl_dV=true) const |
Forms \delta Psi_v for valence state Fv for all kappas (see solve_dPsi) | |
TDHF & | operator= (const TDHF &)=delete |
TDHF (const TDHF &)=default | |
Public Member Functions inherited from ExternalField::CorePolarisation | |
double | last_eps () const |
Returns eps (convergance) of last solve_core run. | |
double | last_its () const |
Returns its (# of iterations) of last solve_core run. | |
double | last_omega () const |
Returns omega (frequency) of last solve_core run. | |
int | rank () const |
int | parity () const |
bool | imagQ () const |
double & | eps_target () |
Convergance target. | |
double | eps_target () const |
Convergance target. | |
double | eta () const |
Damping factor; 0 means no damping. Must have 0 <= eta < 1. | |
void | set_eta (double eta) |
Set/update damping factor; 0 means no damping. Must have 0 <= eta < 1. | |
CorePolarisation & | operator= (const CorePolarisation &)=delete |
CorePolarisation (const CorePolarisation &)=default | |
Additional Inherited Members | |
Protected Member Functions inherited from ExternalField::CorePolarisation | |
CorePolarisation (const DiracOperator::TensorOperator *const h) | |
Protected Attributes inherited from ExternalField::TDHF | |
std::vector< std::vector< DiracSpinor > > | m_X {} |
std::vector< std::vector< DiracSpinor > > | m_Y {} |
std::vector< std::vector< DiracSpinor > > | m_hFcore {} |
const HF::HartreeFock *const | p_hf |
const std::vector< DiracSpinor > | m_core |
const double | m_alpha |
const HF::Breit *const | p_VBr |
Protected Attributes inherited from ExternalField::CorePolarisation | |
const DiracOperator::TensorOperator * | m_h |
double | m_core_eps {1.0} |
int | m_core_its {0} |
double | m_core_omega {0.0} |
int | m_rank |
int | m_pi |
bool | m_imag |
double | m_eta {0.4} |
double | m_eps {1.0e-10} |
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.
Like the TDHF method, but uses a basis: Note: Benefit is we can include Breit into dV while using a basis (unlike diagramRPA method). Downside, it's quite slow (though maybe could be made much more efficient)
DiracSpinor ExternalField::TDHFbasis::form_dPsi | ( | const DiracSpinor & | Fv, |
const double | omega, | ||
dPsiType | XorY, | ||
const int | kappa_beta, | ||
const std::vector< DiracSpinor > & | spectrum, | ||
StateType | st = StateType::ket , |
||
bool | incl_dV = true |
||
) | const |
Forms \delta Psi_v for valence state Fv (including core pol.) - 1 kappa.
Solves or Returns \( \chi_\beta \) for given kappa_beta, where
\[ X_{j,m} = (-1)^{j_\beta-m}tjs(j,k,j;-m,0,m)\chi_j \]
XorY takes values: dPsiType::X or dPsiType::Y. st takes values: StateType::ket or StateType::bra. Solves by expanding over basis. To include correlations, use basis with correlations.
std::vector< DiracSpinor > ExternalField::TDHFbasis::form_dPsis | ( | const DiracSpinor & | Fv, |
const double | omega, | ||
dPsiType | XorY, | ||
const std::vector< DiracSpinor > & | spectrum, | ||
StateType | st = StateType::ket , |
||
bool | incl_dV = true |
||
) | const |
Forms \delta Psi_v for valence state Fv for all kappas (see form_dPsi)
Forms \delta Psi_v for valence state Fv for all kappas (see solve_dPsi)
|
finaloverridevirtual |
Solves TDHF equations self-consistantly for core electrons at frequency omega, using basis expansion.
Solves TDHF equations (using a basis to expand the states) self-consistantly for core electrons at frequency omega. Will iterate up to a maximum of max_its. Set max_its=1 to get first-order correction [note: no dampling is used for first itteration]. If print=true, will write progress to screen
Reimplemented from ExternalField::TDHF.