template<typename D>
class libint2::DIIS< D >
DIIS (``direct inversion of iterative subspace'') extrapolation.
The DIIS class provides DIIS extrapolation to an iterative solver of (systems of) linear or nonlinear equations of the
form, where
is a (non-linear) function of
(in general,
is a set of numeric values). Such equations are usually solved iteratively as follows:
- given a current guess at the solution,
, evaluate the error (``residual'')
(NOTE that the dimension of
and
do not need to coincide);
- use the error to compute an updated guess
;
- proceed until a norm of the error is less than the target precision
. Another convergence criterion may include
. \ For example, in the Hartree-Fock method in the density form, one could choose
, the one-electron density matrix, and
, where
is the Fock matrix, a linear function of the density. Because
is a linear function of the density and DIIS uses a linear extrapolation, it is possible to just extrapolate the Fock matrix itself, i.e.
and
. \ Similarly, in the Hartree-Fock method in the molecular orbital representation, DIIS is used to extrapolate the Fock matrix, i.e.
and
, where
and
are the occupied and unoccupied orbitals, respectively. \ Here's a short description of the DIIS method. Given a set of solution guess vectors
and the corresponding error vectors
DIIS tries to find a linear combination of
that would minimize the error by solving a simple linear system set up from the set of errors. The solution is a vector of coefficients
that can be used to obtain an improved
:
A more complicated version of DIIS introduces mixing:
Note that the mixing is not used in the first iteration. \ The original DIIS reference: P. Pulay, Chem. Phys. Lett. 73, 393 (1980).
- Template Parameters
-