# 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`

— Function`one_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`

— Type`KineticEnergyHamiltonian`

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`

— Type`PotentialEnergyHamiltonian`

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`

— Type`AtomicOneBodyHamiltonian(op, orbital)`

Structure holding a one-body energy operator `op`

acting on its associated `orbital`

.

`Base.Broadcast.materialize!`

— Method`materialize!(::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`

— Function`diagonalize_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.