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*/
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 The entire basis is used; caller must ensure all required
31 states are present.
32 */
34 const HF::HartreeFock *const hf,
35 const std::vector<DiracSpinor> &basis,
36 const DiracOperator::TensorOperator *const h_minus = nullptr);
37
38private:
39 std::vector<DiracSpinor> m_basis{}; // store copy?
40
41public:
42 //! See @ref TDHF::solve_core(); same notes and warnings apply.
43 virtual void solve_core(const double omega, int max_its = 100,
44 const bool print = true) override final;
45
46 virtual Method method() const override final { return Method::basis; }
47
48 /*!
49 @brief Forms varphi^v_pm for valence state Fv: single kappa channel.
50 @details
51 Solves the TDHF equation via basis expansion for a single kappa channel;
52 see @ref TDHF::solve_dPsi() for the equation. Returns \f$ \chi_\beta \f$
53 for given kappa_beta, where
54 \f[ X_{j,m} = (-1)^{j_\beta-m}tjs(j,k,j;-m,0,m)\chi_j. \f]
55
56 @param Fv Valence state \f$ \phi_v \f$.
57 @param omega Perturbation frequency \f$ \omega \f$.
58 @param XorY Selects X or Y solution; see @ref dPsiType.
59 @param kappa_beta Kappa quantum number of the target channel.
60 @param spectrum Single-particle spectrum used to expand the solution.
61 @param st Bra or ket convention; see @ref StateType.
62 @param incl_dV Include the induced potential \f$ \delta V \f$ if true.
63
64 @note To include correlations, use a basis with correlations.
65 @note To exclude excitations to occupied states, remove them from the basis.
66 */
67 DiracSpinor form_dPsi(const DiracSpinor &Fv, const double omega,
68 dPsiType XorY, const int kappa_beta,
69 const std::vector<DiracSpinor> &spectrum,
70 StateType st = StateType::ket,
71 bool incl_dV = true) const;
72
73 /*!
74 @brief Forms varphi^v_pm for valence state Fv: all kappa channels.
75 @details
76 Calls @ref form_dPsi() for all allowed \f$ \kappa \f$ channels.
77
78 @param Fv Valence state \f$ \phi_v \f$.
79 @param omega Perturbation frequency \f$ \omega \f$.
80 @param XorY Selects the X or Y solution; see @ref dPsiType.
81 @param spectrum Single-particle spectrum used to construct the solution.
82 @param st Bra or ket convention; see @ref StateType.
83 @param incl_dV Include the induced potential \f$ \delta V \f$ if true.
84 */
85 std::vector<DiracSpinor> form_dPsis(const DiracSpinor &Fv, const double omega,
86 dPsiType XorY,
87 const std::vector<DiracSpinor> &spectrum,
88 StateType st = StateType::ket,
89 bool incl_dV = true) const;
90
91public:
92 TDHFbasis &operator=(const TDHFbasis &) = delete;
93 TDHFbasis(const TDHFbasis &) = default;
94 ~TDHFbasis() = default;
95};
96
97} // 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: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:42
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:87
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:112
virtual Method method() const override final
Returns RPA method.
Definition TDHFbasis.hpp:46
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