DIIS solver
ElemCo.DIIS — ModuleDIIS module for iterative solvers
This module provides the DIIS (Direct Inversion in the Iterative Subspace) method for iterative solvers.
The DIIS method is used to accelerate the convergence of iterative solvers by combining previous solutions to the problem to minimize the residual. The vectors and residuals are stored in files as Vector{Vector{Float64}}.
Usage
diis = Diis(EC)
for it = 1:maxit
# compute Vec = [Vec1,Vec2,...] and Res = [Res1,Res2,...]
# ...
perform!(diis, Vec, Res)
# ...
endOne can also provide a tuple of custom dot-product functions for the residuals components as customdots argument in perform! function.
Main structure
ElemCo.DIIS.Diis — TypeDIIS object
Exported functions
ElemCo.DIIS.perform! — Functionperform!(diis::Diis, Amps, Res, customdots=())Perform DIIS.
Amps is an array of vectors and Res is an array of residuals. The vectors Amps will be replaced by the DIIS optimized vectors. customdots is a tuple of functions for each residual component to calculate the dot-product. The functions should have the signature f(ten1::Array{T,N}, ten2::Array{T,N}).
Internal functions
ElemCo.DIIS.combine — Methodcombine(diis::Diis, vecfiles, coeffs)Combine vectors from files with coefficients.
ElemCo.DIIS.custom_dot — Methodcustom_dot(diis::Diis, customdots, tens, vecs)Compute weighted (with diis.weights) dot product of vectors using custom dot-product functions customdots::Tuple. vecs are reshaped to the shape of tensors tens.
ElemCo.DIIS.loadamps — Methodloadamps(diis::Diis, ipos)Load vectors from file at position ipos as Vector{Vector{Float64}}.
ElemCo.DIIS.loadres — Methodloadres(diis::Diis, ipos)Load residuals from file at position ipos as Vector{Vector{Float64}}.
ElemCo.DIIS.loadvecs — Methodloadvecs(file)Load vectors from file as Vector{Vector{Float64}}.
ElemCo.DIIS.saveamps — Methodsaveamps(diis::Diis, vecs, ipos)Save vectors to file (replacing previous vectors at position ipos).
ElemCo.DIIS.saveres — Methodsaveres(diis::Diis, vecs, ipos)Save residuals to file (replacing previous residuals at position ipos).
ElemCo.DIIS.tuple_reshape — Methodtuple_reshape(vecs, tens)Reshape vectors vecs to the shape of tensors tens.
Returns Tuple of reshaped vectors.
ElemCo.DIIS.update_Bmat — Functionupdate_Bmat(diis::Diis, nDim, Res, ithis, customdots=())Update B matrix with new residual (at the position ithis).
B matrix is defined as:
\[{\bf B} = \begin{pmatrix} \langle {\bf R}_1, {\bf R}_1 \rangle & \langle {\bf R}_1, {\bf R}_2 \rangle & \cdots & \langle {\bf R}_1, {\bf R}_{\rm nDim} \rangle & -1 \\ \langle {\bf R}_2, {\bf R}_1 \rangle & \langle {\bf R}_2, {\bf R}_2 \rangle & \cdots & \langle {\bf R}_2, {\bf R}_{\rm nDim} \rangle & -1 \\ \vdots & \vdots & \ddots & \vdots & \vdots \\ \langle {\bf R}_{\rm nDim}, {\bf R}_1 \rangle & \langle {\bf R}_{\rm nDim}, {\bf R}_2 \rangle & \cdots & \langle {\bf R}_{\rm nDim}, {\bf R}_{\rm nDim} \rangle & -1 \\ -1 & -1 & \cdots & -1 & 0 \end{pmatrix}\]
Returns the dot product of the new residual with itself, $\langle {\bf R}_{\rm ithis}, {\bf R}_{\rm ithis} \rangle$.
ElemCo.DIIS.weighted_dot — Methodweighted_dot(diis::Diis, vecs1, vecs2)Compute weighted (with diis.weights) dot product of vectors.