# DMRG for 2D lattices with rotational symmetry

0 votes
asked

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.

Best,
NiccolĂ˛

## 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!

Cheers,
Matt