ITensor / ITensorInfiniteMPS.jl

A package for working with infinite matrix product states (MPS) with ITensor.
MIT License
33 stars 20 forks source link

Improvements to VUMPS implementation #19

Open mtfishman opened 3 years ago

mtfishman commented 3 years ago

Some improvements to the VUMPS implementation:

maartenvd commented 3 years ago

for 1), do you actually notice a difference? We looked at this a bit, and it was all very inconsistent, or even dependent on what kind of decomposition was used when doing the canicalization (finding AL-C = C-AR)

mtfishman commented 3 years ago

By which kind of decomposition, do you mean using positive QR vs. polar in Eq. (22)? Did you find one worked better than the other?

I just started to test it out now so haven't drawn any conclusions yet. I seem to recall that Valentin Zauner-Stauber said that using a polar decomposition was more accurate in practice compared to the positive QR when using Eq. (22) to update AL and AR, so far I have only used a polar decomposition.

maartenvd commented 3 years ago

indeed, positive qr vs positive ql vs polar. The matlab people in our group apparantly use polar, while I have it set to positive qr.

I remember that we did some benchmarking in the past and there was no clear conclusion, with results dependent on other finicky details. For example, if your input mps had an upper triangular C matrix, then it somehow mattered if you used some ql or qr decomposition in the vumps step. I was wondering if you had a clearer conclusion :)

Another thing to play with is to not do what the original vumps paper suggests (extracting AL and AR from (20) ). Instead what we now typically do is only extracting AL and then finding C,AR from the consistency equation AL C = C AR. That's another issue with no clear consensus on which is better.

mtfishman commented 3 years ago

That's interesting. I also remember having some finicky details like that when I was trying to impose reflection symmetry (explicitly imposing AR = AL^T), in which case one or the other of Eq. (20) or (22) caused convergence problems, though I don't remember all of the details now.

I remember at some point I tried to extract C and AR from AL at every step of VUMPS, which of course makes the translational invariance numerically exact. However I believe when I tried that, it completely destroyed the convergence of VUMPS, though that was a while ago so I may be remembering wrong.

It would be good to share notes about best practices for implementation details like that, there are definitely a few choices to make.

maartenvd commented 3 years ago

ah I actually tried to do reflection invariance too, but it's really tricky. If I remember correctly you can prove that there are two classes of solutions and only in one of the cases can you set AR = AL^T. Assuming it is indeed in the class of AR = AL^T, I think you can do it by first finding AL, then finding a gauge transform which transforms AL into AL', but this AL' can then be related to AR' = AL'^T. In the end I gave up on that primarily because it may go horribly wrong for certain models that don't allow such a solution.

I'd be interested in contributing to notes like that! I think in general there is quite a lot of knowledge build up in specific groups that doesn't really get into papers, because it's not very interesting in and of itself.