ampsci
High-precision calculations for one- and two-valence atomic systems
MixedStates.hpp
1#pragma once
2#include <vector>
3class Wavefunction;
4class DiracSpinor;
5class Grid;
6namespace MBPT {
7class CorrelationPotential;
8}
9namespace HF {
10class HartreeFock;
11class Breit;
12} // namespace HF
13
14//! External field: Mixed-states + Core Polarisation
15namespace ExternalField {
16
17constexpr bool print_final_eps = false;
18constexpr bool print_each_eps = false;
19
20/*!
21 @brief Solves the inhomogeneous TDHF (mixed-states) equation for perturbed orbital dF.
22 @details
23 Solves
24 \f[
25 (h_{\rm HF} - \en_a \mp \omega)\delta F + F_S = 0
26 \f]
27 for \f$ \delta F \f$, where \f$ F_S \f$ is the source term. Typically
28 \f[
29 F_S = (t_\pm + \delta V_\pm - \delta\en^a_\pm)\phi_a.
30 \f]
31
32 - The angular momentum \f$ \kappa \f$ of the solution is that of @p Fs.
33 - \f$ t \f$: Extenral field operator
34 - \f$ \delta V_\pm \f$: core polarisation correction (see @ref CorePolarisation)
35 - Solved iteratively using the Green's function method.
36
37 @param Fa Unperturbed orbital \f$ \phi_a \f$.
38 @param omega External-field frequency \f$ \omega \f$.
39 @param vl Local potential (nuclear + direct).
40 @param alpha Fine-structure constant.
41 @param core Core electrons (for exchange).
42 @param Fs Source term \f$ F_S \f$ (note sign: this is \f$ h\phi_a \f$,
43 not \f$ -h\phi_a \f$).
44 @param eps_target Convergence goal for the inhomogeneous ODE solver.
45 @param Sigma Optional correlation potential.
46 @param VBr Optional Breit interaction.
47 @param H_mag Magnetic part of QED radiative potential (electric part
48 should be included in @p vl).
49
50 @return Perturbed orbital \f$ \delta F \f$.
51*/
53 const DiracSpinor &Fa, double omega, const std::vector<double> &vl,
54 double alpha, const std::vector<DiracSpinor> &core, const DiracSpinor &Fs,
55 double eps_target = 1.0e-9,
56 const MBPT::CorrelationPotential *const Sigma = nullptr,
57 const HF::Breit *const VBr = nullptr, const std::vector<double> &H_mag = {});
58
59/*!
60 @brief As solveMixedState(), but updates an existing solution @p dF in place.
61 @details
62 Starts from @p dF as an initial guess rather than zero; converges faster if
63 @p dF is already an approximate solution (e.g., from a nearby frequency).
64*/
65void solveMixedState(DiracSpinor &dF, const DiracSpinor &Fa, double omega,
66 const std::vector<double> &vl, double alpha,
67 const std::vector<DiracSpinor> &core,
68 const DiracSpinor &Fs, double eps_target = 1.0e-9,
69 const MBPT::CorrelationPotential *const Sigma = nullptr,
70 const HF::Breit *const VBr = nullptr,
71 const std::vector<double> &H_mag = {});
72
73//! Solves Mixed States (TDHF) equation. Overload; takes hf object
75solveMixedState(const DiracSpinor &Fa, double omega, const DiracSpinor &Fs,
76 const HF::HartreeFock *const hf, double eps_target = 1.0e-9,
77 const MBPT::CorrelationPotential *const Sigma = nullptr);
78
79//! Solves Mixed States (TDHF) equation. Overload; takes hf object
80void solveMixedState(DiracSpinor &dF, const DiracSpinor &Fa, double omega,
81 const DiracSpinor &Fs, const HF::HartreeFock *const hf,
82 double eps_target = 1.0e-9,
83 const MBPT::CorrelationPotential *const Sigma = nullptr);
84
85/*!
86 @brief Solves for dF via explicit sum over basis; mainly for tests.
87 @details
88 \f[
89 \delta F = \sum_n \frac{\ket{n}\matel{n}{F_S}{a}}{\en_a - \en_n \pm \omega}
90 \f]
91 where @p hFa is the already-evaluated source spinor \f$ F_S \f$.
92*/
94 double omega,
95 const std::vector<DiracSpinor> &basis);
96
97} // namespace ExternalField
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:42
Non-uniform radial grid with Jacobian, suitable for atomic structure calculations.
Definition Grid.hpp:85
Breit potentials for one- (Hartree-Fock Breit) and two-body Breit integrals.
Definition Breit.hpp:87
Solves relativistic Hartree-Fock equations for core and valence. Optionally includes Breit and QED ef...
Definition HartreeFock.hpp:72
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition Wavefunction.hpp:37
Core-polarisation (RPA) corrections to matrix elements of an external field.
Definition calcMatrixElements.cpp:14
DiracSpinor solveMixedState(const DiracSpinor &Fa, double omega, const std::vector< double > &vl, double alpha, const std::vector< DiracSpinor > &core, const DiracSpinor &hFa, double eps_target, const MBPT::CorrelationPotential *const Sigma, const HF::Breit *const VBr, const std::vector< double > &H_mag)
Solves the inhomogeneous TDHF (mixed-states) equation for perturbed orbital dF.
Definition MixedStates.cpp:16
DiracSpinor solveMixedState_basis(const DiracSpinor &Fa, const DiracSpinor &hFa, double omega, const std::vector< DiracSpinor > &basis)
Solves for dF via explicit sum over basis; mainly for tests.
Definition MixedStates.cpp:111
Functions and classes for Hartree-Fock.
Definition CI_Integrals.hpp:13
Many-body perturbation theory.
Definition CI_Integrals.hpp:10
void Breit(const IO::InputBlock &input, const Wavefunction &wf)
Breit corrections to HF energies and matrix elements.
Definition Breit.cpp:38