![]() |
|
High-precision calculations for one- and two-valence atomic systems
|
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) | |
| 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).
wf must outlive this object. | ContinuumOrbitals::ContinuumOrbitals | ( | const HF::HartreeFock * | hf | ) |
Construct with Hartree-Fock pointer.
Pointer is stored: must outlive this object. Must not be nullptr.
| 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).
| ec | Continuum energy (au, > 0) |
| min_l | Minimum l |
| max_l | Maximum l |
| psi | Ionised (bound) state; optional (nullptr: none) |
| force_rescale | Rescale 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_self | Subtract the self-interaction of psi from the direct potential, \( y^0_{\psi\psi}(r) \) (V^{N-1} potential of the ion) |
| force_orthog | Orthogonalise to the core states of the same kappa, and to psi (to psi also at each exchange iteration) |
| average_tail | Fill the (zeroed) unresolved high-r tail with a local average (see DiracODE::averageTail); done after exchange, before orthogonalisation |
force_rescale and subtract_self only apply for the HartreeFock, Hartree, and ApproxHF methods. | 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.
| ec | Continuum energy (au, > 0) |
| min_l | Minimum l |
| max_l | Maximum l |
| Z_eff | Effective charge |
| Fi | Ionised (bound) state; may be nullptr |
| force_orthog | Orthogonalise to Fi (only; not the core) |
| average_tail | Fill the (zeroed) unresolved high-r tail with a local average (see DiracODE::averageTail) |
| 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).
| 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.
| void ContinuumOrbitals::clear | ( | ) |
Resets (deletes) all orbitals.
| std::vector<DiracSpinor> ContinuumOrbitals::orbitals {} |
The continuum orbitals (each solve appends to this list)