Fock Operators
The Fock operator consists of an AbstractQuantumSystem
and a set of coupled integro-differential equations, the solution of which is the objective of the self-consistent field procedure. For the solution process to work, the set of equations need to implement a few methods:
- It must fulfil Julia's iteration interface, i.e. each element must be the equation for a single orbital, which is solved independently from the other equations, but with the other orbitals as inputs.
energy_matrix!
which calculates the energy matrix $\mat{H}_i$ for orbital equation $i$, where $\vec{c}^H\mat{H}_i\vec{c}$ gives the orbital energy for the correspond orbital. The overall energy matrix $\mat{H}=\sum_i\mat{H}_i$ is used to solve the secular problem for the mixing coefficients.hamiltonian
which returns the Hamiltonian corresponding to one orbital equation.update!
which recomputes all orbital-dependent integrals, shared among the equations of the equation system.
SCF.Fock
— TypeFock(quantum_system, equations, S, symmetries)
A Fock operator consists of a quantum_system
, from which equations
are variationally derived, via an overload of diff(quantum_system)
. quantum_system
must also provide an overload for overlap_matrix
-> S
.
equations
must provide an overload for energy_matrix!
. equations
must be iterable, where each element corresponds to the equation for one orbital, and must provide an overload for hamiltonian
and energy
. Additionally, update!
must be provided for equations
, to prepare the equation system for the next iteration.
SCF.norm_rot!
— Functionnorm_rot!(fock, v)
Normalize and rotate the eigenvector v
such that the first lobe has positive sign.
SCF.rotate_first_lobe!
— Functionrotate_first_lobe!(v)
Rotate the vector v
such that the first lobe has positive sign.
SCF.energy_matrix!
— Functionenergy_matrix!(H::AbstractMatrix, equations[, which=:total_energy])
Calculates the energy matrix of the system of equations
. This overwrites the entries of H
. To be overloaded by the user; must support `which=:totalenergy,
which=:doublecountedenergy, and
which=:kineticenergy`.
energy_matrix!(H::AbstractMatrix, fock::Fock[, which=:total_energy])
Calculates the energy matrix of the quantum system of fock
. This overwrites the entries of H
.
SCF.hamiltonian
— Functionhamiltonian(equation::Equation)
Returns the orbital Hamiltonian of equation
. To be overloaded by the user.
SCF.update!
— Functionupdate!(eqs; kwargs...)
Update the equation system eqs
, for the current iteration. To be overloaded by the user.
update!(eqs, quantum_system; kwargs...)
Update the equation system eqs
with respect to quantum_system
, for the current iteration. To be overloaded by the user.