ampsci
c++ program for high-precision atomic structure calculations of single-valence systems
Public Member Functions | List of all members
ExternalField::TDHFbasisfinal

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< DiracSpinorform_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...
 
TDHFbasisoperator= (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 DiracSpinorget_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< DiracSpinorsolve_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)
 
TDHFoperator= (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.
 
CorePolarisationoperator= (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< DiracSpinorm_core
 
const double m_alpha
 
const HF::Breit *const p_VBr
 
- Protected Attributes inherited from ExternalField::CorePolarisation
const DiracOperator::TensorOperatorm_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}
 

Detailed Description

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)

Member Function Documentation

◆ form_dPsi()

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.

◆ form_dPsis()

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)

◆ solve_core()

void ExternalField::TDHFbasis::solve_core ( const double  omega,
int  max_its = 100,
const bool  print = true 
)
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.


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