Description
I plan to start adding the ability to handle Hamiltonians with next-nearest neighbor (NNN) terms (e.g. the J1-J2 model) in the iPEPS time evolution algorithms. There are a number of choices:
- Simple update: PhysRevB.103.235155 (Fig. 8; I think it's also called the "3-site cluster update" by Corboz in PhysRevB.100.195141 and PhysRevB.108.205154)
- Full update: PhysRevB.97.174408
This two methods constructs an environment around the 3 sites (using the bond weights / CTMRGEnv) involved in the update to define the cost function. There is another class of "loop update" methods, which treats the 2 x 2 sites around the NNN bond as a PBC-MPS (there will be 3 "physical axes" at each site):
- PhysRevB.94.075143 This method uses QR/LQ throughout the loop to obtain R, L matrices on the bond to be truncated, and construct projectors on the bond to truncate.
- PhysRevB.102.075147. This method uses FET to iteratively optimize the tensor at each site on the 2 x 2 loop.
I plan to add the "loop update" methods first. Except the SU method 1, the NNN term is expressed as a 3-site MPO. The loop update can also involve a 4-site MPO in the 2 x 2 loop. But in our current way to store the Hamiltonian as a LocalOperator
, each term is a whole gate. Should we add the ability for LocalOperator
to store a multi-site term as an MPO, or just do a manual conversion specifically for the time evolution methods?
In addition, could you please also inform me if there are existing methods from MPSKit that can be used to optimize a PBC-MPS?