Hello,

is there a way to have a finite periodic chain (so a ring) for the BoseHubbard model?

As far as I understand setting bc_MPS to "finite" gives a finite chain with open boundary conditions and "infinite" is basically performing iDMRG - or am I already getting this part wrong?

Thanks in advance!

Best regards,

Korbinian

## finite open, finite periodic and infinite periodic chains

### Re: finite open, finite periodic and infinite periodic chains

Kind of. We do

**not**support finite MPS with periodic boundaries for the MPS itself i.e. writing

\[ | \Psi\rangle = \sum Tr(A^{\sigma_1} \cdots A^{\sigma_L}) | \sigma_1 \cdots \sigma_L\rangle \]

This is a form which is usefull analytically (e.g. if you write the ground state of the AKLT model on a finite ring), but not numerically, because it doesn't allow to define a canonical form.

However, you

**can**define a

`bc_MPS="finite"`

and still have periodic couplings in your Hamiltonian. The price you pay for this is that the coupling over the "boundary" of the MPS is long range afterwards. Hence you can't use TEBD, and if you use DMRG, you should definitely use the mixer.To do that, take a look at the parameters documented in init_lattice, i.e. use

`bc_MPS=True, bc_x="periodic"`

.Ian McCulloch once suggested that one can also use a different "enumeration" or "

**order**" of the MPS compared to the physical sites in such a case to avoid having the terribly long range:

Instead of using

\[ | \Psi\rangle = \sum A^{\sigma_1} A^{\sigma_2} A^{\sigma_3} \cdots A^{\sigma_L}) | \sigma_1 \cdots \sigma_L\rangle \]

one could use

\[ | \Psi\rangle = \sum A^{\sigma_L} A^{\sigma_1} A^{\sigma_{L-1}} A^{\sigma_2} A^{\sigma_{L-2}} A^{\sigma_3} \cdots A^{\sigma_{L/2}} | \sigma_1 \cdots \sigma_L\rangle \]

In that way, a nearest neighbor coupling on the ring becomes a next-nearest neighbour coupling for the MPO.

I've never tried that out myself with TeNPy, but it is implemented already with the help of the order. I added a few lines in a git commit a few minutes ago such that you can now use

`order='folded'`

as model parameter for the tenpy.models.lattice.Chain.Be aware the functions like the expectation_value, which return an array with the expectation value of a local operator on each site of an MPS will also be affected by that order. You can use the lattice method mps2lat_values to permute the values in the array such that it corresponds to the original/default order.