High-precision calculations for one- and two-valence atomic systems
ContinuumOrbitals.hpp
1#pragma once
2#include "Wavefunction/DiracSpinor.hpp"
3#include <memory>
4#include <vector>
5class Wavefunction;
6class Grid;
7namespace HF {
8class HartreeFock;
9}
10
11//! Class stores set of continuum orbitals, and solves using Hartree-Fock method
13
14public:
15 //! Takes existing Wavefunction object to construct.
17 //! Construct with Hartree-Fock pointer
19
20 ContinuumOrbitals &operator=(const ContinuumOrbitals &) = default;
21 ContinuumOrbitals(const ContinuumOrbitals &) = default;
22 ~ContinuumOrbitals() = default;
23
24 //! Solves continuum states with energy ec between min/max l.
25 //! average_tail: fill the (zeroed) unresolved high-r tail with a local
26 //! average (see DiracODE::averageTail).
27 int solveContinuumHF(double ec, int min_l, int max_l,
28 const DiracSpinor *psi = nullptr,
29 bool force_rescale = false, bool subtract_self = true,
30 bool force_orthog = true, bool average_tail = false);
31
32 //! Solves cntm states using simple H-like potential eith effective charge (Z_eff). Usually, Zeff = sqrt{2 * I_{njl}} * n.
33 int solveContinuumZeff(double ec, int min_l, int max_l, double Z_eff,
34 const DiracSpinor *Fi, bool force_orthog,
35 bool average_tail = false);
36
37 //! As solveContinuumZeff, but uses exact analytic Dirac-Coulomb functions
38 //! rather than solving the ODE numerically. Relativistic case requires
39 //! FLINT (see DiracContinuum::available).
40 int solveContinuumZeffAnalytic(double ec, int min_l, int max_l, double Z_eff,
41 const DiracSpinor *Fi, bool force_orthog);
42
43 //! Checks orthogonality between cntm and core orbitals, returns worst eps
44 double check_orthog(bool print = true) const;
45
46 //! Resets (deletes) all orbitals
47 void clear();
48
49 std::vector<DiracSpinor> orbitals{};
50
51private:
52 void IncludeExchange(DiracSpinor &F_cntm, const DiracSpinor *F_i,
53 bool force_orthog, const std::vector<double> &vc);
54
55 std::shared_ptr<const Grid> p_rgrid;
56 const HF::HartreeFock *p_hf;
57 double m_alpha;
58};
Class stores set of continuum orbitals, and solves using Hartree-Fock method.
Definition ContinuumOrbitals.hpp:12
void clear()
Resets (deletes) all orbitals.
Definition ContinuumOrbitals.cpp:259
int solveContinuumHF(double ec, int min_l, int max_l, const DiracSpinor *psi=nullptr, bool force_rescale=false, bool subtract_self=true, bool force_orthog=true, bool average_tail=false)
Solves continuum states with energy ec between min/max l. average_tail: fill the (zeroed) unresolved ...
Definition ContinuumOrbitals.cpp:44
double check_orthog(bool print=true) const
Checks orthogonality between cntm and core orbitals, returns worst eps.
Definition ContinuumOrbitals.cpp:22
int solveContinuumZeff(double ec, int min_l, int max_l, double Z_eff, const DiracSpinor *Fi, bool force_orthog, bool average_tail=false)
Solves cntm states using simple H-like potential eith effective charge (Z_eff). Usually,...
Definition ContinuumOrbitals.cpp:178
int solveContinuumZeffAnalytic(double ec, int min_l, int max_l, double Z_eff, const DiracSpinor *Fi, bool force_orthog)
As solveContinuumZeff, but uses exact analytic Dirac-Coulomb functions rather than solving the ODE nu...
Definition ContinuumOrbitals.cpp:223
Stores radial Dirac spinor: F_nk = (f, g)
Definition DiracSpinor.hpp:44
Non-uniform radial grid with Jacobian, suitable for atomic structure calculations.
Definition Grid.hpp:85
Solves relativistic Hartree-Fock equations for core and valence. Optionally includes Breit and QED ef...
Definition HartreeFock.hpp:111
Stores Wavefunction (set of valence orbitals, grid, HF etc.)
Definition Wavefunction.hpp:38
Functions and classes for Hartree-Fock.
Definition CI_Integrals.hpp:16