+1 vote
asked by (140 points)
edited by

Hi Miles,

I want to know some details about iqdmrg.

I think the iqdmrg is a variational optimization algorithm and in each sweep step iqdmrg has to solve an eigenequation, is it? Or iqdmrg works like traditional DMRG with many block matrices ?

I also do not know how iqindex make MPS conserve quantum number. Or in other words, I do not know how iqindex make a tensor contain non-zero elements only for certain index ranges. Is there any detailed reference for MPS algorithm with additive quantum number?

Best regards!

1 Answer

+1 vote
answered by (70.1k points)

Hi Huike,
These are good questions but it will be hard for me to completely answer them here. I am working on the next section of the ITensor Book (http://itensor.org/docs.cgi?page=book) which is going to have a section which goes into detail about IQTensors and their structure. There is already some material on IQTensors there which might help you a lot.

About iqdmrg, it is not a separate algorithm from DMRG. If you look at the sample code iqdmrg.cc (in the sample/ folder under the ITensor software) then you'll see at the end it actually calls the same dmrg(...) function that the dmrg.cc code does. It's literally the same algorithm code, just with template parameters that switch the tensor type from ITensor to IQTensor.

So all of the steps are the same as in regular DMRG with dense tensors, except the tensors are block-sparse due to the (Abelian) quantum number conservation. (Recall that the main steps of DMRG are applying a few steps of an iterative solver, such as Davidson or Lanczos, then performing an SVD of the two-site wavefunction tensor to restore the MPS form.)

One important thing about how IQTensor DMRG works is that whatever the initial total quantum number of the initial MPS (actually IQMPS) is, the DMRG algorithm is guaranteed not to change this total quantum number. So it is important to make sure the total quantum numbers of the initial state are well defined. You'll see that in iqdmrg.cc the code uses an InitState helper object to initialize the state to be a product state with a well defined total Sz.

Finally, if you are asking about the details of how IQTensors actually work internally to conserve quantum numbers, it would be too long to explain in full detail here (but the ITensor Book will eventually explain most of this). Basically the indices of an IQTensor, of type IQIndex, are segmented into "sectors" which are labeled by Index and QN object pairs. Once the total "flux" or quantum number of an IQTensor is set (e.g. by setting of the the tensor components non-zero) then only blocks with that total flux are allowed to be non-zero. All other blocks are assumed to be zero and are not even allocated in memory. Operations on IQTensors such as contracting them or computing SVD's of them preserve this block structure and exploit the block structure for extra efficiency.

Best regards,

commented by (140 points)
Hi Miles:
    Thanks for your patient answer.
    I have understood the how  IQindex make the total quantum number conserved.  For each tensor we can also assign quantum number to their virtual bond.
    I can't wait to see your IQTensor sector. I think it will be really helpful for so many people.

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.