+1 vote
asked by (130 points)
edited by

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);


II. change the following

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


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

Best regards,


1 Answer

0 votes
answered by (62.7k points)

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.


Welcome to ITensor Support Q&A, where you can ask questions and receive answers from other members of the community.

Formatting Tips:
  • To format code, indent by four spaces
  • To format inline LaTeX, surround it by @@ on both sides
  • To format LaTeX on its own line, surround it by $$ above and below
  • For LaTeX, it may be necessary to backslash-escape underscore characters to obtain proper formatting. So for example writing \sum\_i to represent a sum over i.
If you cannot register due to firewall issues (e.g. you cannot see the capcha box) please email Miles Stoudenmire to ask for an account.

To report ITensor bugs, please use the issue tracker.