Page 1 of 1

How are periodic boundary conditions implemented?

Posted: 17 Jan 2023, 19:40
by Ozaru9000
Hi! I was wondering, how the periodic boundary conditions are implemented in TeNPy? In some other post I've read, that the MPS never create loops, so how is this issue bypassed? By means of long range MPOs, or rather differently?

Re: How are periodic boundary conditions implemented?

Posted: 27 Jan 2023, 15:22
by Johannes
Indeed, the MPS is always an open line where a cut of a single virtual leg always divides it into left and right parts - otherwise, the canonical form isometry conditions wouldn't go through e.g. for local expectation values or optimal truncation.

When you use infinite MPS, the Model formally has "periodic" boundary conditions in x direction in TeNPy, which indicates that you do have couplings between the different unit cells. "periodic" is not really the right word, but for determining from where to where you can have terms (when calling Model.add_coupling), it works technically the same way as if you have periodic boundary conditions.

And yes, if you use a finite MPS with periodic boundary conditions in x direction, you indeed get an open MPS with long range couplings. For the naive ordering of the MPS (going 1, 2, ... L for an L-site chain), the NN coupling accross the MPS boundary becomes range L. The Chain allows for a "folded" order, see ordering, where NN couplings map to next-NN couplings for the MPS - this can help to require less DMRG sweeps for convergence.

Re: How are periodic boundary conditions implemented?

Posted: 18 Jul 2023, 23:09
by dorf
Hey, is there a reference that I should cite if I use the 'folded' ordering? Seems like a well-known trick, but I wonder who 'did it first'.
Thanks!

Re: How are periodic boundary conditions implemented?

Posted: 02 Aug 2023, 15:15
by Johannes
I learned the trick in private communications from Ian McCulloch several years back, but I'm also not sure who was the first to suggest/use it, sor I can't provide a reference...