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
— TypeKineticEnergyHamiltonian
The 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
— TypePotentialEnergyHamiltonian
The 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 RadialOrbital
s.
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
:arnoldi
which performs the standard Krylov iteration looking for the eigenvalues with smallest real values,:arnoldi_shift_invert
which performs the Krylov iteration but with the shifted and inverted matrix(H - I*σ)⁻¹
looking for the eigenvalues with largest real values,:eigen
which uses Julia's built-in eigensolver.
tol
sets the Krylov tolerance.