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 Like TDHF, but solves the TDHF equations via basis expansion.
14 @details
15 Same physics as @ref TDHF; see that class for full description.
16 The perturbed core orbitals are found via the basis expansion
17 \f[
18 \varphi^a_\pm = \sum_n
19 \frac{\ket{n}\matel{n}{t_\pm + \delta V_\pm}{a}}{\en_a - \en_n \pm \omega},
20 \f]
21 rather than by solving the inhomogeneous ODE directly.
22*/
23class TDHFbasis final : public TDHF {
24public:
25 /*!
26 @brief Constructs TDHFbasis for operator h using the provided basis.
27 @param h External field operator.
28 @param hf @ref HF::HartreeFock object defining the core.
29 @param basis Single-particle basis used to expand \f$ \varphi^a_\pm \f$.
30 Core (occupied) states are dropped; only the excited states
31 are used.
32 */
34 const HF::HartreeFock *const hf,
35 const std::vector<DiracSpinor> &basis);
36
37private:
38 std::vector<DiracSpinor> m_basis{}; // store copy?
39
40public:
41 //! See TDHF::solve_core(); same notes and warnings apply.
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 /*!
48 @brief Forms varphi^v_pm for valence state Fv: single kappa channel.
49 @details
50 Solves the TDHF equation via basis expansion for a single kappa channel;
51 see @ref TDHF::solve_dPsi() for the equation. Returns \f$ \chi_\beta \f$
52 for given kappa_beta, where
53 \f[ X_{j,m} = (-1)^{j_\beta-m}tjs(j,k,j;-m,0,m)\chi_j. \f]
54
55 @param Fv Valence state \f$ \phi_v \f$.
56 @param omega Perturbation frequency \f$ \omega \f$.
57 @param XorY Selects X or Y solution; see @ref dPsiType.
58 @param kappa_beta Kappa quantum number of the target channel.
59 @param spectrum Single-particle spectrum used to expand the solution.
60 @param st Bra or ket convention; see @ref StateType.
61 @param incl_dV Include the induced potential \f$ \delta V \f$ if true.
62
63 @note To include correlations, use a basis with correlations.
64 */
65 DiracSpinor form_dPsi(const DiracSpinor &Fv, const double omega,
66 dPsiType XorY, const int kappa_beta,
67 const std::vector<DiracSpinor> &spectrum,
68 StateType st = StateType::ket,
69 bool incl_dV = true) const;
70
71 /*!
72 @brief Forms varphi^v_pm for valence state Fv: all kappa channels.
73
74 @details
75 Calls @ref form_dPsi() for all allowed \f$ \kappa \f$ channels.
76
77 @param Fv Valence state \f$ \phi_v \f$.
78 @param omega Perturbation frequency \f$ \omega \f$.
79 @param XorY Selects the X or Y solution; see @ref dPsiType.
80 @param spectrum Single-particle spectrum used to construct the solution.
81 @param st Bra or ket convention; see @ref StateType.
82 @param incl_dV Include the induced potential \f$ \delta V \f$ if true.
83 */
84 std::vector<DiracSpinor> form_dPsis(const DiracSpinor &Fv, const double omega,
85 dPsiType XorY,
86 const std::vector<DiracSpinor> &spectrum,
87 StateType st = StateType::ket,
88 bool incl_dV = true) const;
89
90public:
91 TDHFbasis &operator=(const TDHFbasis &) = delete;
92 TDHFbasis(const TDHFbasis &) = default;
93 ~TDHFbasis() = default;
94};
95
96} // namespace ExternalField
General tensor operator (virtual base class); all single-particle (one-body) tenosor operators derive...
Definition TensorOperator.hpp:198
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:55
Uses TDHF to include core-polarisation (RPA) corrections to matrix elements of an external field oper...
Definition TDHF.hpp:58
Like TDHF, but solves the TDHF equations via basis expansion.
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 varphi^v_pm for valence state Fv: single kappa channel.
Definition TDHFbasis.cpp:38
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 varphi^v_pm for valence state Fv: all kappa channels.
Definition TDHFbasis.cpp:84
virtual void solve_core(const double omega, int max_its=100, const bool print=true) override final
See TDHF::solve_core(); same notes and warnings apply.
Definition TDHFbasis.cpp:109
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:114
Dirac operators: TensorOperator base class and derived implementations for single-particle (one-body)...
Definition SecondOrder.hpp:7
Core-polarisation (RPA) corrections to matrix elements of an external field.
Definition MatrixElements.hpp:9
StateType
Whether the state is a bra or ket.
Definition CorePolarisation.hpp:119
dPsiType
Selects the perturbed orbital: X = varphi_+, Y = varphi_-.
Definition CorePolarisation.hpp:117
Method
Available RPA/core-polarisation methods.
Definition CorePolarisation.hpp:87