# Davidson algorithm and dmrg sweeping

+1 vote
edited

Hi!
I read in the documentation regarding the underlying iterative-solver used for the finite-size DMRG algorithm:

It is essentially never a good idea to fully converge the inner
Davidson loop of a DMRG calculation, since the MPS environment
defining the projected Hamiltonian used in the Davidson calculation is
only approximate anyway. DMRG can still perfectly converge with the
minimum number of Davidson steps since it does multiple sweeps over
the system.

Is this conclusion resulted from numerical experiments? Does iteration number of the Davidson algorithm increase in the last sweepings automatically?

The following may be helpful for other users:

I'm currently writing BigMatrix wrapper which allows to use the D. algorithm for matrices - ITensor objects. There I want to find eigen-values/vectors with high accuracy. So, I increase MaxIter
and change in the iterativesolver.h

auto maxiter_ = args.getSizeT("MaxIter",2);
auto errgoal_ = args.getReal("ErrGoal",1E-14);
auto debuglevel = args.getInt("DebugLevel",-1);
auto miniter_ = args.getSizeT("MinIter",1);
auto ExactDiag_ = args.getInt("ED",0);

and

II. change the following

size_t actual_maxiter = std::min(maxiter_,size_t(maxsize-1)) ;

to

 size_t actual_maxiter;
if(ExactDiag_==0)
{
actual_maxiter = std::min(maxiter_,size_t(maxsize-1));
}
else
{
actual_maxiter = maxiter_;
}


Best regards,

Murod

Hi Murod,
Yes the statement in the docs about the Davidson iterations is based mainly on experience and numerical experiments. But it's also justifiable based on how DMRG works: as the algorithm nears convergence and reaches a fixed point where the MPS is already a very good approximation for the ground state, then the initial vector used in Davidson will also already be an equally good eigenvector of the matrix there as the MPS is of the whole Hamiltonian. So in fact the Davidson steps can be taken lower and lower toward the end of DMRG, not raised, without any problem. (Of course it can only be taken as low as doing one Davidson iteration otherwise the algorithm would no longer be doing anything at all!)

Thanks for sharing that code you're working on - sounds interesting.

Miles