ampsci
High-precision calculations for one- and two-valence atomic systems
TDHFbasis.hpp
1#pragma once
2#include "CorePolarisation.hpp"
3#include "TDHF.hpp"
4#include <vector>
5class DiracSpinor;
6namespace DiracOperator {
7class TensorOperator;
8}
9
10namespace ExternalField {
11
12//! @brief
13//! Similar to the time-dependent Hartree-Fock method, but expands dPsi
14//! corrections using a basis to include core-polarisation (RPA) corrections to
15//! matrix elements of some external field operator.
16
17/*! @details
18Like the TDHF method, but uses a basis:
19Note: Benefit is we can include Breit into dV while using a basis (unlike
20diagramRPA method). Downside, it's quite slow (though maybe could be made much
21more efficient)
22*/
23class TDHFbasis final : public TDHF {
24public:
26 const HF::HartreeFock *const hf,
27 const std::vector<DiracSpinor> &basis);
28
29private:
30 const std::vector<DiracSpinor> m_basis; // store copy?
31
32public:
33 //! @brief Solves TDHF equations self-consistantly for core electrons at
34 //! frequency omega, using basis expansion.
35 //! @details Solves TDHF equations (using a basis to expand the states)
36 //! self-consistantly for core electrons at frequency omega. Will iterate up
37 //! to a maximum of max_its. Set max_its=1 to get first-order correction
38 //! [note: no dampling is used for first itteration]. If print=true, will
39 //! write progress to screen
40 virtual void solve_core(const double omega, int max_its = 100,
41 const bool print = true) override final;
42
43 //! Returns RPA method
44 virtual Method method() const override final { return Method::basis; }
45
46 //! Forms \delta Psi_v for valence state Fv (including core pol.) - 1 kappa
47 //! @details
48 //! Solves
49 //! \f[ (H + \Sigma - \epsilon - \omega)X = -(h + \delta V
50 //! - \delta\epsilon)\psi \f]
51 //! or
52 //! \f[ (H + \Sigma - \epsilon + \omega)Y = -(h^\dagger + \delta V^\dagger
53 //! - \delta\epsilon)Psi\f]
54 //! Returns \f$ \chi_\beta \f$ for given kappa_beta, where
55 //! \f[ X_{j,m} = (-1)^{j_\beta-m}tjs(j,k,j;-m,0,m)\chi_j \f]
56 //! XorY takes values: dPsiType::X or dPsiType::Y.
57 //! st takes values: StateType::ket or StateType::bra.
58 //! Solves by expanding over basis. To include correlations, use basis with
59 //! correlations.
60 DiracSpinor form_dPsi(const DiracSpinor &Fv, const double omega,
61 dPsiType XorY, const int kappa_beta,
62 const std::vector<DiracSpinor> &spectrum,
63 StateType st = StateType::ket,
64 bool incl_dV = true) const;
65
66 //! Forms \f$ [\delta \psi_v]_\kappa \f$ for valence state \f$\psi_v\f$, for all allowed \f$\kappas\f$ (see solve_dPsi)
67 std::vector<DiracSpinor> form_dPsis(const DiracSpinor &Fv, const double omega,
68 dPsiType XorY,
69 const std::vector<DiracSpinor> &spectrum,
70 StateType st = StateType::ket,
71 bool incl_dV = true) const;
72
73public:
74 TDHFbasis &operator=(const TDHFbasis &) = delete;
75 TDHFbasis(const TDHFbasis &) = default;
76 ~TDHFbasis() = default;
77};
78
79} // namespace ExternalField
General operator (virtual base class); operators derive from this.
Definition TensorOperator.hpp:65
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:41
Uses time-dependent Hartree-Fock method to include core-polarisation (RPA) corrections to matrix elem...
Definition TDHF.hpp:40
Similar to the time-dependent Hartree-Fock method, but expands dPsi corrections using a basis to incl...
Definition TDHFbasis.hpp:23
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.
Definition TDHFbasis.cpp:19
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 for valence state , for all allowed (see solve_dPsi)
Definition TDHFbasis.cpp:66
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.
Definition TDHFbasis.cpp:91
virtual Method method() const override final
Returns RPA method.
Definition TDHFbasis.hpp:44
Solves relativistic Hartree-Fock equations for core and valence. Optionally includes Breit and QED ef...
Definition HartreeFock.hpp:71
Dirac Operators: General + derived.
Definition GenerateOperator.cpp:3
Calculates many-body corrections (RPA) to matrix elements of external field.
Definition calcMatrixElements.cpp:14