Hartree-Fock
The Hartree-Fock method is one of simplest ab initio methods where the wave function is modeled as a single Slater determinant of spin-orbitals
\[\Psi_\text{HF}(1,2,...,N) = \frac{1}{\sqrt{N!}} \left| \begin{array}{c c c c} \phi_1(1) & \phi_2(1) & ... & \phi_N(1) \\ \phi_1(2) & \phi_2(2) & ... & \phi_N(2) \\ \vdots & \vdots & \ddots & \vdots \\ \phi_1(N) & \phi_2(N) & ... & \phi_N(N) \\ \end{array}\right|\]
The spin-orbitals are constructed under the basis set approximation
\[\phi_i(\vec{r}) = C_{\mu i} \chi_\mu(\vec{r})\]
Note that sum over repeated indices is assumed.
where $\chi(\vec{r})$ are contracted Gaussian basis functions from pre-constructed basis set such as STO-3G
, cc-pVDZ
, ANO
, etc.
These orbitals are constrained to be orthonormal to each other. Moreover, we choose to solve for the set of orbitals that diagonalize the Fock matrix
\[D^\alpha_{\mu \nu} = C^\alpha_{\mu i} C^\alpha_{\nu i} \\[2mm] F^\alpha_{\mu \nu} = H_{\mu \nu} + (D^\alpha_{\lambda\sigma} + D^\beta_{\lambda\sigma})(\mu \nu | \lambda \sigma) + D^\alpha_{\lambda\sigma}(\mu \nu | \lambda \sigma)\]
such that
\[C^\alpha_{\mu i} F^\alpha_{\mu\nu} C^\alpha_{\nu j} = \delta_{ij} \epsilon_i\]
These are the canonical Hartree-Fock orbitals.
Equations also need to be solved for $F^\beta$, but in the case of a restricted calculation, i.e. orbitals for both spins are taken to be the same, solving for $\beta$ will yield the same results as for $\alpha$.
Restricted Hartree-Fock (RHF)
Minimal example
using Fermi
@molecule {
He 0.0 0.0 0.0
}
@set basis 3-21g
@energy rhf
This will run a RHF computation on Helium using the 3-21G
basis set. Currently, Fermi does not support point group symmetry.
Output file
The first part of the output gives an overview of the input information
He 0.000000000000 0.000000000000 0.000000000000
Charge: 0 Multiplicity: 1
Nuclear repulsion: 0.0000000000
Number of AOs: 2
Number of Doubly Occupied Orbitals: 1
Number of Virtual Spatial Orbitals: 1
First the molecule XYZ is print. Followed by charge and multiplicity. Those will be taken as 0 and 1 by default, but can be controlled using @set charge
and @set multiplicity
.
⚠️ RHF can only be used if the multiplicity is 1.
Next, we see the information about the iterations
Iter. E[RHF] ΔE Dᵣₘₛ t DIIS damp
--------------------------------------------------------------------------------
1 -2.8352184971 -2.835e+00 1.166e-01 0.78 false 4.71
2 -2.8260289197 9.190e-03 2.885e-02 0.00 false 1.45
3 -2.8157915919 1.024e-02 1.601e-02 0.00 false 0.00
4 -2.8355956172 -1.980e-02 4.948e-02 0.18 true 0.00
5 -2.8356798736 -8.426e-05 3.475e-03 0.00 true 0.00
6 -2.8356798733 2.662e-10 8.346e-06 0.00 true 0.00
7 -2.8356798736 -2.908e-10 6.418e-06 0.00 true 0.00
8 -2.8356798736 -1.554e-14 4.527e-08 0.00 true 0.00
9 -2.8356798728 8.546e-10 1.108e-05 0.14 true 0.00
10 -2.8356798735 -7.070e-10 6.475e-06 0.00 true 0.00
11 -2.8356798736 -1.477e-10 4.596e-06 0.00 true 0.00
12 -2.8356798736 -8.882e-16 9.630e-09 0.00 true 0.00
13 -2.8356798736 4.441e-16 1.687e-10 0.00 true 0.00
--------------------------------------------------------------------------------
RHF done in 1.46s
Iterations are controlled using a few keywords. The convergence is achieved when
- The number of iterations reaches
scf_max_iter
or
- $\Delta E$ is less than
scf_e_conv
and $D_{rms}$ is less thanscf_max_rms
DIIS
and damp
are auxiliary strategies to reach convergency faster.
Finally, the RHF energy is listed along with orbital energies
@Final RHF Energy -2.835679873641 Eₕ
• Orbitals Summary
Orbital Energy Occupancy
1 -0.9035715084 ↿⇂
2 2.0817026436
✔ SCF Equations converged 😄
RHF object
The computation returns a wave function object Fermi.HartreeFock.RHF
which contains data useful for post-processing.
Fermi.HartreeFock.RHF
— TypeFermi.HartreeFock.RHF
Wave function object for Restricted Hartree-Fock methods
High Level Interface
Run a RHF computation and return the RHF object:
julia> @energy rhf
Equivalent to
julia> Fermi.HartreeFock.RHF()
Computes RHF using information from Fermi.Options.Current
Fields
Name | Description |
---|---|
molecule | Molecule object |
energy | RHF Energy |
ndocc | Number of doubly occupied spatial orbitals |
nvir | Number of virtual spatial orbitals |
orbitals | RHF Orbitals object |
e_conv | ΔE from the last iteration |
d_conv | Orbitals RMS change from the last iteration |
Relevant options
These options can be set with @set <option> <value>
Option | What it does | Type | choices [default] |
---|---|---|---|
rhf_alg | Picks RHF algorithm | Int | [1] |
scf_max_rms | RMS density convergence criterion | Float64 | [10^-9] |
scf_max_iter | Max number of iterations | Int | [50] |
scf_e_conv | Energy convergence criterion | Float64 | [10^-10] |
basis | What basis set to use | String | ["sto-3g"] |
df | Whether to use density fitting | Bool | true [false ] |
jkfit | What aux. basis set to use for JK | String | ["auto"] |
diis | Whether to use DIIS | Bool | [true ] false |
oda | Whether to use ODA | Bool | [true ] false |
oda_cutoff | When to turn ODA off (RMS) | Float64 | [1E-1] |
oda_shutoff | When to turn ODA off (iter) | Int | [20] |
scf_guess | Which guess density to use | String | "core" ["gwh"] |
Struct tree
RHF <: AbstractHFWavefunction <: AbstractWavefunction