Orbital equations
Hamiltonian
AtomicStructure.OrbitalHamiltonianTerm
— TypeOrbitalHamiltonianTerm(i, j, coeff, A, integrals)
Represents a term in the orbital Hamiltonian arising from a variation of the energy expressions between configurations i
and j
in the multi-configurational expansion. coeff
is the numeric coefficient, A
is the operator acting on the orbital, and integrals
is a vector of OrbitalIntegral
s arising from the presence of non-orthogonal orbitals and whose values should be multiplied to form the overall coefficient.
AtomicStructure.coefficient
— Functioncoefficient(term::OrbitalHamiltonianTerm)
Return the multiplicative coefficient pertaining to term
, excluding the conj(c_i)*c_j
mixing coefficients, due to the configuration-interaction.
coefficient(term::OrbitalHamiltonianTerm, c::Vector)
Return the multiplicative coefficient pertaining to term
, including the conj(c_i)*c_j
mixing coefficients, due to the configuration-interaction.
AtomicStructure.OrbitalHamiltonian
— TypeOrbitalHamiltonian(R, terms, mix_coeffs, projector, orbital)
The Hamiltonian for orbital
is constructed from a radial basis R
, a set of OrbitalHamiltonianTerm
terms
that describe the various interactions between orbitals, mix_coeffs
which are the mixing coefficents for the multi-configurational expansion. The projector
ensures orthogonality between orbital pairs which have Lagrange multipliers associated with them, by projecting out components of other orbitals every time the OrbitalHamiltonian
action on orbital
is computed.
AtomicStructure.Projector
— TypeProjector(ϕs, orbitals, S)
Represents the projector on the subspace spanned by the radial orbitals ϕs
(corresponding to orbitals
).
AtomicStructure.projectout!
— Functionprojectout!(y, projector)
Project out all components of y
parallel to the radial orbitals projector.ϕs
.
AtomicStructure.SCF.energy_matrix!
— Methodenergy_matrix!(H, hamiltonian, ϕ)
Compute the contribution of hamiltonian
to the Hamiltonian matrix H
by repeatedly acting on the associated radial orbital ϕ
with the different multi-configurational OrbitalHamiltonianTerm
s of hamiltonian
.
Base.filter
— Methodfilter(fun::Function, H::OrbitalHamiltonian)
Filter the OrbitalHamiltonianTerm
s of H
according to the predicate fun
.
Base.copyto!
— Methodcopyto!(dest::AbstractMatix, hamiltonian::OrbitalHamiltonian)
Materialize the orbital hamiltonian
into matrix form and store it in dest
, using the current values of all other orbitals. This is only possible if the orbital hamiltonian
does not contain any ExchangePotential
s or SourceTerm
s (which are not diagonal in orbital space), since the former is non-local (and thus not representable as a matrix) and the latter is not a linear operator (but an affine one).
Typical usage is to compute an easily factorizable matrix that can be used for preconditioning the solution of the full equation.
Base.:+
— Methodh::OrbitalHamiltonian + λ::UniformScaling
Shift the OrbitalHamiltonian
h
by λ
.
Base.:-
— Methodh::OrbitalHamiltonian - λ::UniformScaling
Shift the OrbitalHamiltonian
h
by -λ
.
AtomicStructure.SCF.KrylovWrapper
— TypeKrylovWrapper(hamiltonian)
Proxy object used in the Krylov iterations, during orbital improvement. This is useful, since hamiltonian
may be defined to act on objects such as vectors living in function spaces (as e.g. implemented using ContinuumArrays.jl), whereas the SCF iterations act on the coefficients directly.
Missing docstring for LinearAlgebra.mul!(y::V₁, A::KrylovWrapper{T,Hamiltonian}, x::V₂) where {V₁,V₂,T,B,Hamiltonian<:OrbitalHamiltonian}
. Check Documenter's build log for details.
Orbital integrals and terms
AtomicStructure.OrbitalIntegral
— TypeOrbitalIntegral{N}
Abstract type for integrals of rank N
of orbitals, whose values need to be recomputed every time the orbitals are updated. Rank 0 corresponds to a scalar value, rank 1 to a diagonal matrix, etc.
AtomicStructure.OrbitalOverlapIntegral
— TypeOrbitalOverlapIntegral(a, b, av, bv, value)
Represents the orbital overlap integral ⟨a|b⟩
, for orbitals a
and b
, along with view
s of their radial orbitals av
and bv
and the current value
of the integral.
AtomicStructure.SCF.update!
— MethodSCF.update!(oo::OrbitalOverlapIntegral)
Update the value of the integral oo
.
AtomicStructure.HFPotential
— TypeHFPotential(k, a, b, av, bv, V̂, poisson)
Represents the k
:th multipole exansion of the Hartree–Fock potential formed by orbitals a
and b
(av
and bv
being view
s of their corresponding radial orbitals). V̂
is the resultant one-body potential formed, which can act on a third orbital and poisson
computes the potential by solving Poisson's problem.
AtomicStructure.DirectPotential
— TypeDirectPotential
Special case of HFPotential
for the direct interaction, in which case the potential formed from two orbitals can be precomputed before acting on a third orbital.
AtomicStructure.SCF.update!
— MethodSCF.update!(p::DirectPotential)
Update the direct potential p
by solving the Poisson problem with the current values of the orbitals forming the mutual density.
update!(eqs; kwargs...)
Update the equation system eqs
, for the current iteration. To be overloaded by the user.
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.
AtomicStructure.ExchangePotential
— TypeExchangePotential
Special case of HFPotential
for the exchange interaction, in which case the potential is formed from the orbital acted upon, along with another orbital, and then applied to a third orbital. Thus this potential cannot be precomputed, but must be recomputed every time the operator is applied. This makes this potential expensive to handle and the number of times it is applied should be minimized, if possible.
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.
AtomicStructure.SourceTerm
— TypeSourceTerm(operator, source_orbital, ov)
The point of SourceTerm
is to implement inhomogeneous terms that contribute to the equation for an orbital, and whose input is some other source_orbital
. This kind of term appears in multi-configurational problems.
AtomicStructure.ShiftTerm
— TypeShiftTerm(λ)
The point of ShiftTerm
is to implement an overall energy shift of the Hamiltonian.
Orbital equations
AtomicStructure.AtomicOrbitalEquation
— TypeAtomicOrbitalEquation(atom, equation, orbital, ϕ, hamiltonian)
Governs the evolution of an atomic orbital
belonging to an atom
. equation
is the symbolic expression, from which hamiltonian
is constructed. ϕ
is the QuasiVector
representing the radial orbital.
AtomicStructure.SCF.energy
— FunctionSCF.energy(hfeq::AtomicOrbitalEquation[, which=:total])
Compute the orbital energy for the orbital governed by hfeq
. Optionally select which contribution is computed (:total
, :onebody
, :direct
, or :exchange
).