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 Like @ref 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
23 @warning Does not currently work correctly for frequency-dependent operators
24 unless they depend only on the magnitude \f$ |\omega| \f$.
25 The method assumes \f$ t_- = t_+^\dag \f$, whereas the correct relation is
26 \f$ t_-(\omega) = t_+^\dag(-\omega) \f$.
27 This will be fixed in a future update.
28*/
29class TDHFbasis final : public TDHF {
30public:
31 /*!
32 @brief Constructs TDHFbasis for operator h using the provided basis.
33 @param h External field operator.
34 @param hf @ref HF::HartreeFock object defining the core.
35 @param basis Single-particle basis used to expand \f$ \varphi^a_\pm \f$.
36 The entire basis is used; caller must ensure all required
37 states are present.
38 */
40 const HF::HartreeFock *const hf,
41 const std::vector<DiracSpinor> &basis);
42
43private:
44 std::vector<DiracSpinor> m_basis{}; // store copy?
45
46public:
47 //! See @ref TDHF::solve_core(); same notes and warnings apply.
48 virtual void solve_core(const double omega, int max_its = 100,
49 const bool print = true) override final;
50
51 virtual Method method() const override final { return Method::basis; }
52
53 /*!
54 @brief Forms varphi^v_pm for valence state Fv: single kappa channel.
55 @details
56 Solves the TDHF equation via basis expansion for a single kappa channel;
57 see @ref TDHF::solve_dPsi() for the equation. Returns \f$ \chi_\beta \f$
58 for given kappa_beta, where
59 \f[ X_{j,m} = (-1)^{j_\beta-m}tjs(j,k,j;-m,0,m)\chi_j. \f]
60
61 @param Fv Valence state \f$ \phi_v \f$.
62 @param omega Perturbation frequency \f$ \omega \f$.
63 @param XorY Selects X or Y solution; see @ref dPsiType.
64 @param kappa_beta Kappa quantum number of the target channel.
65 @param spectrum Single-particle spectrum used to expand the solution.
66 @param st Bra or ket convention; see @ref StateType.
67 @param incl_dV Include the induced potential \f$ \delta V \f$ if true.
68
69 @note To include correlations, use a basis with correlations.
70 @note To exclude excitations to occupied states, remove them from the basis.
71 */
72 DiracSpinor form_dPsi(const DiracSpinor &Fv, const double omega,
73 dPsiType XorY, const int kappa_beta,
74 const std::vector<DiracSpinor> &spectrum,
75 StateType st = StateType::ket,
76 bool incl_dV = true) const;
77
78 /*!
79 @brief Forms varphi^v_pm for valence state Fv: all kappa channels.
80 @details
81 Calls @ref form_dPsi() for all allowed \f$ \kappa \f$ channels.
82
83 @param Fv Valence state \f$ \phi_v \f$.
84 @param omega Perturbation frequency \f$ \omega \f$.
85 @param XorY Selects the X or Y solution; see @ref dPsiType.
86 @param spectrum Single-particle spectrum used to construct the solution.
87 @param st Bra or ket convention; see @ref StateType.
88 @param incl_dV Include the induced potential \f$ \delta V \f$ if true.
89 */
90 std::vector<DiracSpinor> form_dPsis(const DiracSpinor &Fv, const double omega,
91 dPsiType XorY,
92 const std::vector<DiracSpinor> &spectrum,
93 StateType st = StateType::ket,
94 bool incl_dV = true) const;
95
96public:
97 TDHFbasis &operator=(const TDHFbasis &) = delete;
98 TDHFbasis(const TDHFbasis &) = default;
99 ~TDHFbasis() = default;
100};
101
102} // 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:42
Uses TDHF to include core-polarisation (RPA) corrections to matrix elements of an external field oper...
Definition TDHF.hpp:59
Like TDHF, but solves the TDHF equations via basis expansion.
Definition TDHFbasis.hpp:29
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: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 varphi^v_pm for valence state Fv: all kappa channels.
Definition TDHFbasis.cpp:88
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:113
virtual Method method() const override final
Returns RPA method.
Definition TDHFbasis.hpp:51
Solves relativistic Hartree-Fock equations for core and valence. Optionally includes Breit and QED ef...
Definition HartreeFock.hpp:72
Dirac operators: TensorOperator base class and derived implementations for single-particle (one-body)...
Definition GenerateOperator.cpp:6
Core-polarisation (RPA) corrections to matrix elements of an external field.
Definition calcMatrixElements.cpp:14
StateType
Whether the state is a bra or ket.
Definition CorePolarisation.hpp:112
dPsiType
Selects the perturbed orbital: X = varphi_+, Y = varphi_-.
Definition CorePolarisation.hpp:110
Method
Available RPA/core-polarisation methods.
Definition CorePolarisation.hpp:82