0 votes
asked by (120 points)

Dear community,

I am trying to simulate a 2D Hamiltonian on a rectangular lattice geometry using DMRG in Julia, and I expect the ground state of my system to be invariant under a pi rotation of the lattice.

I was wondering if just performing the DMRG sweeps on half of the MPS and copying the resulting ITensors on the other side of the system could help enforce this symmetry.

Would it be useful (and efficient) compared to performing the whole sweep?

Looking at the dmrg.jl file it looks like I would just have to change the for loop in line 201 to for (b, ha) in sweepnext(Int(N/2)) and then do something like psi[end] = psi[1], psi[end-1] = psi[2] and so on.

For this last point, is there a way to efficiently replace the values of one ITensor with the ones of another without changing the indices? I tried using replacebond! without success as there is a mismatch in the indices of the two tensors.


1 Answer

0 votes
answered by (14.1k points)

Hi Niccolò,

I think the short answer is that it would probably be technically possible, but either through some nontrivial modifications of the DMRG algorithm
(not just small modifications to the current DMRG code in ITensor) or by using a different optimization method like gradient optimization, where it is easier to implement optimizations with nontrivial constraints like that but would likely be slower than DMRG. My guess is that in the end it would be a lot of work and not really worth it.

It is a bit easier to do with infinite MPS algorithms like VUMPS, but I found that there were subtle numerical issues involved with actually getting it working (for example details about which particular matrix factorizations you use when orthogonalizing the effective wavefunction to maintain the symmetry properly). I also only tried it for 1 site unit cells where it is more obvious how to implement that kind of symmetry, I think it would be more subtle for multi-site unit cells.

In the end, you would at most get a factor of 2 speedup, which is ok but I think there are other strategies we are working on for real space parallelization and parallelizing over sums of Hamiltonians which would be more general, easier to implement, easier to maintain, and scale to speedups beyond a factor of 2. We are working on them now so hopefully they will be available to try out relatively soon!


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.