0 votes
asked by (830 points)

What is the easiest way to implement Dynamical Block State Selection (DBSS) within ITensor's DMRG function call?

That is, I want to set the maximum number of states kept, M, based on a property of the density matrix at the middle of a 1D chain for each sweep. This requires setting M in real time rather than reading it in as a constant value.

This technique is, for instance, described in Schollwock's dmrg review article from 2005.

Also, I have the related question: How is the truncation value used when it is supplied to dmrg() in a sweeps object?

To review what I know: during a sweep and at a particular bond, the density matrix is formed from the previous MPS, and subsequently truncated (to dimension M) before a new site is added. The truncation error should be the difference between the sum of density matrix eigenvalues before and after the truncation. In my calculations, I have set limits on truncation error, M, and energy precision (sweep to sweep), and my (default) dmrgObserver is outputting the truncation error, the cutoff M, and the energy; Sometimes the output M is less than the value requested, meaning dmrg() selected a lower value than the input value, while other times M maxes out and truncation error also maxes out. I haven't studied my raw data files to check all of this, but it seems like dmrg() is picking whichever limit applies (if truncation is not reached, then M gets maxed out; if truncation is reached before M, then M does not max out). This implies it should be possible to alter the comparison function on the truncation error, but I don't know whether this would be in the dmrg() function or in the observer function.

Thanks!

Jon

1 Answer

0 votes
answered by (830 points)

I'm going to start implementing this, and if I get a clean looking code put together I'll add it to ITensor on github (although I am slow at programming).

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.

Categories

...