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)
# ...
end
One 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.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.