One-body Hamiltonians
The one-body Hamiltonian for electron $i$ in an atom is given by
\[\begin{equation} \hamiltonian_i \defd -\frac{\nabla_i^2}{2} + V(\vec{r}_i). \end{equation}\]
In spherical coordinates (and using reduced wavefunctions), the Laplacian transforms to
\[\begin{equation} \operator{T}_{r_i} = -\frac{\partial_{r_i}^2}{2} + \frac{\ell(\ell+1)}{2r_i^2}, \end{equation}\]
where the second term, called the centrifugal potential, although originating from the Laplacian, is usually treated together with the nuclear potential $V(r_i)$.
AtomicStructure.one_body_hamiltonian — Functionone_body_hamiltonian(::Type{Tuple}, atom, orb)Return the kinetic and one-body potential energy operators (as a tuple) for the orbital orb of atom.
one_body_hamiltonian(::Type{Tuple}, atom, orb)Return the one-body energy operator for the orbital orb of atom.
AtomicStructure.KineticEnergyHamiltonian — TypeKineticEnergyHamiltonianThe kinetic energy part of the one-body Hamiltonian, ubcluding the centrifugal potential. It is diagonal in spin, i.e. it does not couple orbitals of opposite spin.
AtomicStructure.PotentialEnergyHamiltonian — TypePotentialEnergyHamiltonianThe potential energy part of the one-body Hamiltonian. It is diagonal in spin, i.e. it does not couple orbitals of opposite spin.
AtomicStructure.AtomicOneBodyHamiltonian — TypeAtomicOneBodyHamiltonian(op, orbital)Structure holding a one-body energy operator op acting on its associated orbital.
Base.Broadcast.materialize! — Methodmaterialize!(::MulAdd{<:Any, <:Any, <:Any, T, <:AtomicOneBodyHamiltonian, Source, Dest})Materialize the lazy multiplication–addition of the type y ← α*H*x + β*y where H is a AtomicOneBodyHamiltonian and x and y are RadialOrbitals.
Diagonalization of one-body Hamiltonians
AtomicStructure.diagonalize_one_body — Functiondiagonalize_one_body(H, nev; method=:arnoldi_shift_invert, tol=1e-10, σ=-1)Diagonalize the one-body Hamiltonian H and find the nev lowest eigenpairs, using the specified diagonalization method; valid choices are
:arnoldiwhich performs the standard Krylov iteration looking for the eigenvalues with smallest real values,:arnoldi_shift_invertwhich performs the Krylov iteration but with the shifted and inverted matrix(H - I*σ)⁻¹looking for the eigenvalues with largest real values,:eigenwhich uses Julia's built-in eigensolver.
tol sets the Krylov tolerance.