Applying DMRG to a 2d Model (Sandvik Model)

sandvik model
I want to solve the above model to find the energy gap using DMRG, the problem is the above model is a 2d model.
Here < ij > denotes nearest-neighbor sites and < ijkl > refers to the corners of a plaquette, such that ‘ij’ and ‘kl’ form two parallel adjacent horizontal or vertical links. This interaction contains a subset of the four-site ring exchange.
I have to consider it as quasi 2d strip of 4xL where L is the number of spins, also use periodic boundary condition in x direction and open in y direction.
Please help in writing the itensor code for the same.

Hi Vaibhav,
Yes, that model should be straightforward to program into our system, if you follow along and modify our DMRG code examples. Let us know if you have a specific question about it as you are trying it and we can help.

The key to programming this model into ITensor is to expand out the terms, so for example writing \vec{S}_i\cdot\vec{S}_j = \frac{1}{2} S^+_i S^-_j + \frac{1}{2} S^-_i S^+_j + S^z_i S^z_j, that is, as a sum of products of operators. You can do something similar for the 4-spin term. It will probably expand into a lot of terms but still be something manageable.

The main examples to look at are the 2D DMRG examples at this link, as well as the more introductory 1D examples in our documentation.

Hello sir the code for 2d Hiesenberg model actually defines a bond and interaction between two spins s1 and s2 by b.s1 and b.s2 and it does not have any terms with product in both direction but while opening the terms in the above sandvik model,
I get the terms
Capture
where i,i+1 are nearest neighbors along x direction and j,j+1 are along y direction and I have product of both these terms.
So how do I write code for this part .
Thank you for your help and response…

To write a 4-spin term, you won’t be able to use the square lattice helper function (the one that gives you b.s1 and b.s2), since that function gives you an array only of nearest-neighbor pairs of sites, not 4-site groups.

Therefore, you will need to write your own logic that loops over the bonds and 4-site groups (I assume plaquettes?) of the lattice you want to do, mapping the 2D coordinates to the 1D site indices of the MPO and MPS that is going into your DMRG calculation. I would suggest printing out the b.s1 and b.s2 values for the nearest-neighbor case to study what that does, and draw figures showing the 2D to 1D mapping, and looking at the other posts on this forum asking about similar questions to study how this is done. For example this discussion.