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
I. add additional parameter:
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