TEBD with periodic boundary conditions

Hi, I have been using TEBD for time-evolving my system with open boundary conditions, but I think for my particular system that periodic boundary conditions will have a very different outcome. So I would like to do TEBD with PBC. For this, I need to apply a nonlocal operator between the farthest right sites of my MPS to the farthest left sites. I am trying to determine the best way of doing this. My Hamiltonian is made up of 3-site gates, so for TEBD I am breaking up my Hamiltonian into three parts each of which consists of gates that commute with one another (like the even/odd breakdown but for mod 3 instead of mod 2).

I have a few possible ideas but am wondering if there was anything better. My ideas are as follows.

  1. Use SWAP gates. For example, if I have N sites, I could use SWAP gates to move site N to the left of site 1 so that I can apply a local 3-site gate on N, 1, and 2. But I worry this method would be computationally costly as it would need N-1 SWAP gates to move site N to the left of site 1 and then another N-1 to move it back.

  2. Add two additional sites to the right of site N which are a copy of sites 1 and 2. Then, whenever a gate is applied to sites 1 or 2 on the left, I could copy that data over to the right-most sites, allowing local 3-site operators to apply to N-1, N, 1 or N, 1, 2. Or vice-versa, copying the data from the right-most sites to the left-most. However, naively copying won’t work since the indices for the left-most sites will be different for those on the right. I saw there were methods relating to replacing or swapping indices that may be useful here, but I’m not sure. I should note that I’m using QN conservation as well.

  3. Something to do with MPO evolution. I know MPOs via OpSum() can more easily include periodic boundary conditions, and I luckily have an exact form of my evolution operator, so exponentiation won’t be a problem. But my evolution operator is 3-site and OpSum() I believe only allows adding 1-site operators.

If there is anything else I could consider, please let me know. Thank you!

I can suggest having a look at the CelledVector container that the ITensors team uses for handling infinite systems. If your periodic MPO is H, with N sites, then it lets index H[0], H[-1], H[N+1] etc. CelledVector also has the concept of a translator which alows you to make some adjustments to H between unit cells. The default translator will automatically adjust the link tags so that for example H[0] has the same data as H[N], but the tags a modified to indicate they are different cells.

Oh thank you very much! My only worry is that for MPOs via OpSum(), you create multi-site operators by adding single-site operators at multiple sites (something like OpSum() += (0.5,"id",j-1,"X",j,"X",j+1)), but my evolution operator is 3-site. I know the ITensor team has looked into this (Allow multi-site operators in `OpSum` · Issue #741 · ITensor/ITensors.jl · GitHub), but nonetheless I wasn’t able to do this.

Will this be an issue with the method you propose?

OpSum supports 2-body and 3-body interactions for arbitrary distances inside a finite lattice. But the OpSum framework creates optimized MPOs on an open ended finite lattice with decaying bond dimensions towards the edges. If you know how to build the open finite lattice MPO for your problem I can help you with a couple of options for getting it into a periodic form (without the decaying bond dimensions at the edges).

Thanks for this. I have an idea for how to input my Hamiltonian into the MPO framework with periodic boundary conditions but not my evolution operator. I can try this first. I’m not sure if I can share too much of my work beyond that right now, but thank you for your help.