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

Uses time-dependent Hartree-Fock method to include core-polarisation (RPA) corrections to matrix elements of some external field operator. More...

#include <TDHF.hpp>

Inherits ExternalField::CorePolarisation.

Inherited by ExternalField::TDHFbasis.

Public Member Functions

 TDHF (const DiracOperator::TensorOperator *const h, const HF::HartreeFock *const hf)
 Contruct TDHF operator: takes pointer to operator and to HF object.
 
virtual void solve_core (const double omega, int max_its=100, const bool print=true) override
 Solves TDHF equations self-consistantly for core electrons at frequency omega. More...
 
virtual Method method () const override
 Returns RPA method.
 
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
 

Protected Attributes

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}
 

Additional Inherited Members

- Protected Member Functions inherited from ExternalField::CorePolarisation
 CorePolarisation (const DiracOperator::TensorOperator *const h)
 

Detailed Description

Uses time-dependent Hartree-Fock method to include core-polarisation (RPA) corrections to matrix elements of some external field operator.

Solves set of TDHF equations

\[ (H -\epsilon \pm \omega)\delta\psi_b = -(\delta V + \delta\epsilon_c)\psi_b \]

self consistantly for each electron in the core to determine dV. (See 'ampsci.pdf' for detailed physics description). There is an option to limit the maximum number of iterations; set to 1 to get the first-order correction (nb: no damping is used for first iteration).

Construction
Requires a pointer to an operator (h), a const HF object (const pointer).
Usage
solve_core(omega) solves TDHF eqs for given frequency. Frequency should be positive, but is allowed to be negative (use as a test only, with care). Can be run again with a different frequency, typically does not need to be re-started from scratch. Then, dV(Fa,Fb) returns the correction to the matrix element:

\[ \langle \phi_a || \delta V || \phi_b \rangle \]

Member Function Documentation

◆ solve_core()

void ExternalField::TDHF::solve_core ( const double  omega,
int  max_its = 100,
const bool  print = true 
)
overridevirtual

Solves TDHF equations 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 damping is used for first itteration]. If print=true, will write progress to screen.

Implements ExternalField::CorePolarisation.

Reimplemented in ExternalField::TDHFbasis.

◆ solve_dPsi()

DiracSpinor ExternalField::TDHF::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.

Solves

\[ (H + \Sigma - \epsilon - \omega)X = -(h + \delta V - \delta\epsilon)\psi \]

or

\[ (H + \Sigma - \epsilon + \omega)Y = -(h^\dagger + \delta V^\dagger - \delta\epsilon)Psi\]

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


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