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/*!
13 @brief Similar to TDHF, but uses a basis expansion to include
14 core-polarisation (RPA) corrections to matrix elements of an external field.
15
16 @details
17 Like the @ref TDHF method, but uses a basis to expand the dPsi corrections.
18 Solves
19 \f[ (H + \delta V - \epsilon \pm \omega)\,\delta\psi = -(h + \delta V)\psi \f]
20 by expanding \f$\delta\psi\f$ over the basis:
21 \f[ \delta\psi = \sum_n \frac{|n\rangle\langle n|(h + \delta V)|\psi\rangle}{\epsilon - \epsilon_n \pm \omega} \f]
22*/
23class TDHFbasis final : public TDHF {
24public:
25 /*!
26 @brief Constructs TDHFbasis for operator h using the provided basis.
27
28 @param h External field operator.
29 @param hf @ref HF::HartreeFock object defining the core.
30 @param basis Single-particle basis used to expand dPsi. The entire basis
31 is used; it is the caller's responsibility to ensure all
32 required states are present.
33 */
35 const HF::HartreeFock *const hf,
36 const std::vector<DiracSpinor> &basis);
37
38private:
39 std::vector<DiracSpinor> m_basis{}; // store copy?
40
41public:
42 virtual void solve_core(const double omega, int max_its = 100,
43 const bool print = true) override final;
44
45 virtual Method method() const override final { return Method::basis; }
46
47 /*! @brief
48 Forms dF_v for valence state Fv (including core pol.): single kappa.
49
50 @details
51 Solves
52 \f[ (H + \Sigma - \epsilon - \omega)X
53 = -(h + \delta V - \delta\epsilon)\psi
54 \f]
55 or
56 \f[
57 (H + \Sigma - \epsilon + \omega)Y
58 = -(h^\dagger + \delta V^\dagger - \delta\epsilon)\Psi
59 \f]
60
61 Returns \f$ \chi_\beta \f$ for given kappa_beta, where
62 \f[
63 X_{j,m} = (-1)^{j_\beta-m}tjs(j,k,j;-m,0,m)\chi_j
64 \f]
65
66 @param Fv Valence state \f$\psi_v\f$.
67 @param omega Perturbation frequency \f$\omega\f$.
68 @param XorY Selects X or Y solution; see @ref dPsiType.
69 @param kappa_beta Kappa quantum number of the target channel.
70 @param spectrum Single-particle spectrum used to expand the solution.
71 @param st Bra or ket convention; see @ref StateType.
72 @param incl_dV Include the induced potential \f$\delta V\f$ if true.
73
74 @note To include correlations, use a basis with correlations.
75 @note To exclude excitations to occupied states, remove them from the basis.
76 */
77 DiracSpinor form_dPsi(const DiracSpinor &Fv, const double omega,
78 dPsiType XorY, const int kappa_beta,
79 const std::vector<DiracSpinor> &spectrum,
80 StateType st = StateType::ket,
81 bool incl_dV = true) const;
82
83 /*! @brief
84 Forms the perturbed wavefunctions dF_v for a valence state for all allowed
85 kappa channels.
86
87 @details
88 Solves the inhomogeneous equation for the perturbed wavefunction
89 \f$\delta\psi_v\f$ of the valence state \f$\psi_v\f$ at frequency
90 \f$\omega\f$. The solutions \f$[\delta\psi_v]_\kappa\f$ are returned for
91 all allowed \f$\kappa\f$ values (see @ref form_dPsi).
92
93 The calculation uses the supplied single-particle spectrum and may include
94 the induced potential \f$\delta V\f$ if `incl_dV` is true.
95
96 @param Fv Valence state \f$\psi_v\f$.
97 @param omega Perturbation frequency \f$\omega\f$.
98 @param XorY Selects the X or Y solution; see @ref dPsiType.
99 @param spectrum Single-particle spectrum used to construct the solution.
100 @param st Bra or ket convention; see @ref StateType.
101 @param incl_dV Include the induced potential \f$\delta V\f$ if true.
102 */
103 std::vector<DiracSpinor> form_dPsis(const DiracSpinor &Fv, const double omega,
104 dPsiType XorY,
105 const std::vector<DiracSpinor> &spectrum,
106 StateType st = StateType::ket,
107 bool incl_dV = true) const;
108
109public:
110 TDHFbasis &operator=(const TDHFbasis &) = delete;
111 TDHFbasis(const TDHFbasis &) = default;
112 ~TDHFbasis() = default;
113};
114
115} // namespace ExternalField
General tensor operator (virtual base class); all single-particle (one-body) tenosor operators derive...
Definition TensorOperator.hpp:197
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:42
Uses TDHF to include core-polarisation (RPA) corrections to matrix elements of an external field oper...
Definition TDHF.hpp:42
Similar to TDHF, but uses a basis expansion to include core-polarisation (RPA) corrections to matrix ...
Definition TDHFbasis.hpp:23
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 dF_v for valence state Fv (including core pol.): single kappa.
Definition TDHFbasis.cpp:41
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 the perturbed wavefunctions dF_v for a valence state for all allowed kappa channels.
Definition TDHFbasis.cpp:88
virtual void solve_core(const double omega, int max_its=100, const bool print=true) override final
Solves TDHF equations self-consistently for core electrons at frequency omega.
Definition TDHFbasis.cpp:113
virtual Method method() const override final
Returns RPA method.
Definition TDHFbasis.hpp:45
Solves relativistic Hartree-Fock equations for core and valence. Optionally includes Breit and QED ef...
Definition HartreeFock.hpp:71
Dirac operators: TensorOperator base class and derived implementations for single-particle (one-body)...
Definition GenerateOperator.cpp:3
Calculates many-body corrections (RPA) to matrix elements of external field.
Definition calcMatrixElements.cpp:14