Non-canonical MPS as an initial guess for DMRG

How do I use this algorithm? What does that parameter do?
Post Reply
User avatar
tingyug
Posts: 2
Joined: 24 May 2023, 14:25
Location: Weizmann Institute of Science
Contact:

Non-canonical MPS as an initial guess for DMRG

Post by tingyug »

Hi, does anyone know if a non-canonical initial MPS influences the result of a DMRG run? As a clarification, I meant only the initial state is not canonical, while the final MPS may or may not be canonical. Thanks :)
User avatar
Johannes
Site Admin
Posts: 428
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: Non-canonical MPS as an initial guess for DMRG

Post by Johannes »

For finite DMRG, it doesn't really matter, as it effectively brings the MPS to canonical form in the first sweep.

For infinite DMRG, I'm not completely sure right now, if it's okay. The subtle thing there is that you absorb the tensors into the environments, which you grow each sweep. The MPO assumes that you take the IdL entry on the left and IdR entry on the right environemnts, otherwise you get possibly a wrong sum - so if you mess that up too bad, it might never be able to recover.

In any case, to be on the safe side, I'd highly recommend to just pass an MPS in canonical from - I can't see a good reason to not just call psi.canonical_from() beforehand, so let me ask why you want to do this in the first place?
User avatar
tingyug
Posts: 2
Joined: 24 May 2023, 14:25
Location: Weizmann Institute of Science
Contact:

Re: Non-canonical MPS as an initial guess for DMRG

Post by tingyug »

Thanks for your answer. I forgot to mention I was doing finite DMRG.

I didn't intentionally choose a non-canonical MPS as my initial guess. But a non-canonical MPS becomes an initial guess for some runs in my code (see below).

To save time and resources, I try to start from a small bond dimension (for example, 10 or 20) and increase it by multiplying some factor (say 1.5 or 2) after each run. Between each run, I perform a convergence check for the quantities I'm interested in to see if I should terminate the loop. The last MPS of a run with a small bond dimension may be non-canonical. Yet it becomes the initial guess for the next run with a larger bond dimension if the loop doesn't terminate at this stage.

The procedure is similar to having a "chi_list" in the dmrg_params. Nevertheless, the last few sweeps in a DMRG run having a "chi_list" may be unnecessary, depending on what quantity I want to look at. In addition, they are the sweeps taking the longest time. That's why I came up with the procedure I described above in which the problem arises naturally.

Speaking about the function dmrg.run(), I want to ask a related question. What are the criteria you put in the function to check convergence? There's one criterion I know for sure. If having one more sweep does not improve the energy precision (= lower the energy), the run finishes.
Post Reply