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//! Solves Mixed States (TDHF) equation, inhomogenous equation, with
21//! Hartree-Fock Hamiltonian, including exchange
22/*! @details
23Solves
24\f[
25 (H_{\rm HF} - \epsilon - \omega)\delta\phi + F_S = 0
26\f]
27for \f$\delta\phi\f$ (dF). Typically
28\f[
29 F_S = (\hat h + \delta V_h - \delta \varepsilon) \phi.
30\f]
31Requires unperturbed orbital, Fa, a local potential (vl = vnuc + vdir), set of core electrons (for exchange).
32kappa (Dirac Q. number) of solution will have that of Fs.
33Note sign on hFa
34 (this is \f$\hat h \phi\f$, not \f$-\hat h \phi\f$).
35eps_target is convergance goal for solving the inhomogenous dif.
36equation.
37Can optionally include Sigma (correlations), Breit, and Magnetic part of QED radiative potential (electric part should be included in vl).
38*/
40 const DiracSpinor &Fa, double omega, const std::vector<double> &vl,
41 double alpha, const std::vector<DiracSpinor> &core, const DiracSpinor &Fs,
42 double eps_target = 1.0e-9,
43 const MBPT::CorrelationPotential *const Sigma = nullptr,
44 const HF::Breit *const VBr = nullptr, const std::vector<double> &H_mag = {});
45
46//! Solves Mixed States (TDHF) equation, inhomogenous equation, staring from existing approximate solition, dF.
47/*! @details
48As above [solveMixedState], but starts with existing solution dF (may be 'zero'). If the existing solution is already approximate solution, this allows equation to be solved
49much quicker.
50*/
51void solveMixedState(DiracSpinor &dF, const DiracSpinor &Fa, double omega,
52 const std::vector<double> &vl, double alpha,
53 const std::vector<DiracSpinor> &core,
54 const DiracSpinor &Fs, double eps_target = 1.0e-9,
55 const MBPT::CorrelationPotential *const Sigma = nullptr,
56 const HF::Breit *const VBr = nullptr,
57 const std::vector<double> &H_mag = {});
58
59//! Solves Mixed States (TDHF) equation. Overload; takes hf object
61solveMixedState(const DiracSpinor &Fa, double omega, const DiracSpinor &Fs,
62 const HF::HartreeFock *const hf, double eps_target = 1.0e-9,
63 const MBPT::CorrelationPotential *const Sigma = nullptr);
64
65//! Solves Mixed States (TDHF) equation. Overload; takes hf object
66void solveMixedState(DiracSpinor &dF, const DiracSpinor &Fa, double omega,
67 const DiracSpinor &Fs, const HF::HartreeFock *const hf,
68 double eps_target = 1.0e-9,
69 const MBPT::CorrelationPotential *const Sigma = nullptr);
70
71//! Directly defines dF via explicit sum over basis: mainly for tests.
72//! \f$ \delta F = \sum_n |n\rangle\langle n|h|Fa\rangle / (e_a - e_n + \omega) \f$
74 double omega,
75 const std::vector<DiracSpinor> &basis);
76
77} // namespace ExternalField
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:41
Holds grid, including type + Jacobian (dr/du)
Definition Grid.hpp:31
Breit (Hartree-Fock Breit) interaction potential.
Definition Breit.hpp:52
Solves relativistic Hartree-Fock equations for core and valence. Optionally includes Breit and QED ef...
Definition HartreeFock.hpp:71
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition Wavefunction.hpp:37
Calculates many-body corrections (RPA) to matrix elements of 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 Mixed States (TDHF) equation, inhomogenous equation, with Hartree-Fock Hamiltonian,...
Definition MixedStates.cpp:16
DiracSpinor solveMixedState_basis(const DiracSpinor &Fa, const DiracSpinor &hFa, double omega, const std::vector< DiracSpinor > &basis)
Directly defines dF via explicit sum over basis: mainly for tests. .
Definition MixedStates.cpp:111
Functions and classes for Hartree-Fock.
Definition CI_Integrals.hpp:12
Many-body perturbation theory.
Definition CI_Integrals.hpp:9