Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improvements to VUMPS implementation #19

Open
3 tasks
mtfishman opened this issue Aug 24, 2021 · 5 comments
Open
3 tasks

Improvements to VUMPS implementation #19

mtfishman opened this issue Aug 24, 2021 · 5 comments

Comments

@mtfishman
Copy link
Member

mtfishman commented Aug 24, 2021

Some improvements to the VUMPS implementation:

  • Use Eq. (22) instead of Eq. (20) in [1] for updating the left and right orthogonal gauges of the state when singular values are small enough, to get better precision.
  • Compute the left and right Hamiltonian environments within the unit cell more accurately, currently only one is computed using Eq. (15) of [1] and the others are computed from that one.
  • Find better left and right fixed points of the transfer matrices to use when computing the environments using Eq. (15) of [1]. Currently just using C^T C and C C^T for R and L, which are only approximate fixed points.
@maartenvd
Copy link

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
Copy link
Member Author

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
Copy link

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
Copy link
Member Author

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
Copy link

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants