finite open, finite periodic and infinite periodic chains

How do I use this algorithm? What does that parameter do?
Post Reply
Qottmann
Posts: 13
Joined: 27 Mar 2019, 09:11
Location: ICFO Barcelona

finite open, finite periodic and infinite periodic chains

Post by Qottmann »

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

User avatar
Johannes
Site Admin
Posts: 179
Joined: 21 Jul 2018, 12:52
Location: UC Berkeley

Re: finite open, finite periodic and infinite periodic chains

Post by Johannes »

Qottmann wrote:
14 Oct 2019, 10:19
is there a way to have a finite periodic chain (so a ring) for the BoseHubbard model?
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.

Post Reply