0 votes
asked by (650 points)
edited by

Hi, Miles.
With two nodes,
I found that IQTensors of ground state IQMPS psi after site (N/2)+1 all remain unchanged from initial input. And there's IQIndex mismatch between site (N/2)+1 and site (N/2)+2 so that simply overlap(psi,psi) ends up the error as

Wrong number of IndexVals passed to real/cplx (expected 4, got 0)

Was there something I missed?

Thank you very much!


1 Answer

+1 vote
answered by (70.1k points)

Hi Victor,
Yes, that's the expected behavior, actually. In addition to the MPS (IQMPS) tensors, there are also "V" tensors (inverse Lambda, or inverse singular value diagonal) tensors which "link" or "glue" together the different patches of the MPS.

For simplicity of the code, each node works with an MPS which is the length of the whole system. But then it only actually updates the tensors within the block that it "owns". The other tensors don't get updated.

Hope that helps -


commented by (650 points)
Got it. But if we'd like to use psi to calculate local  observable such as  spin moment or global one such as Stot^2, how could we use half updated psi to do so?  
Thank you.
commented by (70.1k points)
1. for a local observable, each MPS is "gauged" just as in normal, finite serial DMRG, with a special "orthogonality center" tensor which you can adjust by calling .position(j). However, you have to use the MPS from node n to measure sites which are fully contained in block number n.

2. for observables which span beyond the block covered by a single node, it gets more technical. One reference is the parallel DMRG paper by myself and Steve White. Basically, if there are two blocks, block 1 which goes from sites 1 to 10 and block 2 which goes from sites 11 to 20, then there will be a "V" tensor connecting the MPS tensor on site 10 to the MPS tensor on site 11. So the "true" MPS is A1-A2-A3-...-A10-V-A11-A12-...-A20, where "A" just means an MPS tensor, nothing about the gauge. Then to measure a correlation function from site 5 to site 12, for example, you'd need to put the gauge center of the first MPS on site 5 and of the second MPS on site 12, then use the tensors A5-A6-...-A10-V-A11-A12 to do the measurements. The other tensors can be ignored / cancel due to the gauge adjustment.

It's kind of an open question how to do global measurements while taking advantage of the parallel structure by the way.
commented by (650 points)
Hi, Miles.
I was trying to figure out how to get the V tensor. Could you give a help?
For spin system, could I calculate Stot^2 by overlap(psi,Stot^2,psi) where psi =A1-A2-A3-...-A10-V-A11-A12-...-A20 for 20 sites.
Thank you very much!
commented by (70.1k points)
Hi Victor, thoughout the functions in parallel_dmrg.h, there is a std::vector of Tensor objects (Tensor=ITensor or IQTensor) which is called "Vs". Those are the V tensors.

Best regards,
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.