High-precision calculations for one- and two-valence atomic systems
ContinuumOrbitals

ok

Stores set of continuum orbitals, and solves using Hartree-Fock method.

Solves in the Hartree-Fock potential (solveContinuumHF), or in a H-like potential with effective charge (solveContinuumZeff, or analytically with solveContinuumZeffAnalytic). Orbitals are energy-normalised (see DiracODE::solveContinuum). Each solve appends to orbitals (see clear).

#include <ContinuumOrbitals.hpp>

Public Member Functions

 ContinuumOrbitals (const Wavefunction &wf)
 Takes existing Wavefunction object to construct.
 
 ContinuumOrbitals (const HF::HartreeFock *hf)
 Construct with Hartree-Fock pointer.
 
ContinuumOrbitals & operator= (const ContinuumOrbitals &)=default
 
 ContinuumOrbitals (const ContinuumOrbitals &)=default
 
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.
 
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 with Z_eff.
 
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 states.
 
double check_orthog (bool print=true) const
 Checks orthogonality between cntm and core orbitals.
 
void clear ()
 Resets (deletes) all orbitals.
 

Public Attributes

std::vector< DiracSpinor > orbitals {}
 The continuum orbitals (each solve appends to this list)
 

Constructor & Destructor Documentation

◆ ContinuumOrbitals() [1/2]

ContinuumOrbitals::ContinuumOrbitals ( const Wavefunction &  wf)

Takes existing Wavefunction object to construct.

Stores the grid, alpha, and a pointer to its HF object (may be nullptr if HF not set; only the Zeff methods may then be used).

Warning
The HF pointer is stored: wf must outlive this object.

◆ ContinuumOrbitals() [2/2]

ContinuumOrbitals::ContinuumOrbitals ( const HF::HartreeFock *  hf)

Construct with Hartree-Fock pointer.

Pointer is stored: must outlive this object. Must not be nullptr.

Member Function Documentation

◆ solveContinuumHF()

int ContinuumOrbitals::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.

Solves for each kappa with min_l <= l <= max_l, in the HF local potential (vnuc + vdir + vrad). For non-local methods (HartreeFock, ApproxHF), exchange with the full core is then included iteratively (damped; at most 50 iterations, until |dF|^2/|F|^2 < 1e-6; no warning if not converged).

Parameters
ecContinuum energy (au, > 0)
min_lMinimum l
max_lMaximum l
psiIonised (bound) state; optional (nullptr: none)
force_rescaleRescale large-r part of the local potential, so it falls off no slower than -Zion/r: V(r) -> min(V(r), -Zion/r), with Zion = max(1, -r V(r)) at the last grid point
subtract_selfSubtract the self-interaction of psi from the direct potential, \( y^0_{\psi\psi}(r) \) (V^{N-1} potential of the ion)
force_orthogOrthogonalise to the core states of the same kappa, and to psi (to psi also at each exchange iteration)
average_tailFill the (zeroed) unresolved high-r tail with a local average (see DiracODE::averageTail); done after exchange, before orthogonalisation
Returns
0 on success; 1 if there is no Hartree-Fock object (constructed from a Wavefunction with no HF): prints a warning, and no orbitals are solved.
Note
force_rescale and subtract_self only apply for the HartreeFock, Hartree, and ApproxHF methods.

◆ solveContinuumZeff()

int ContinuumOrbitals::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 with Z_eff.

Potential is \( -Z_{\rm eff}/r \) (point-like). Usually, \( Z_{\rm eff} = n\sqrt{2 I_{njl}} \), with \( I_{njl} \) the ionisation energy (au) and n the principal quantum number of the initial state.

Parameters
ecContinuum energy (au, > 0)
min_lMinimum l
max_lMaximum l
Z_effEffective charge
FiIonised (bound) state; may be nullptr
force_orthogOrthogonalise to Fi (only; not the core)
average_tailFill the (zeroed) unresolved high-r tail with a local average (see DiracODE::averageTail)
Returns
0 (always).

◆ solveContinuumZeffAnalytic()

int ContinuumOrbitals::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 states.

Uses exact analytic Dirac-Coulomb functions rather than solving the ODE numerically (see DiracSpinor::exactHlike_cntm). Evaluated pointwise over the entire grid, so there is no tail cut-off (cf. solveContinuumZeff).

Returns
0 (always).
Warning
Relativistic case requires FLINT (see DiracContinuum::available): otherwise prints a warning, and the orbitals are NaN (or an assert fails, in debug builds).

◆ check_orthog()

double ContinuumOrbitals::check_orthog ( bool  print = true) const

Checks orthogonality between cntm and core orbitals.

Overlaps with core states of the same kappa; prints each if print.

Returns
Worst eps: the largest-magnitude overlap (signed); 0 if no HF.

◆ clear()

void ContinuumOrbitals::clear ( )

Resets (deletes) all orbitals.

Member Data Documentation

◆ orbitals

std::vector<DiracSpinor> ContinuumOrbitals::orbitals {}

The continuum orbitals (each solve appends to this list)


The documentation for this class was generated from the following files: