# Can ITensor calculate 2D Heisenberg model real-time correlation function?

+1 vote

Hi, ITensor team,
Thanks for your excellent library about Tensor Network. I can calculate 1D Heisenberg chain real-time correlation function by using Trotter gate method https://itensor.org/docs.cgi?vers=cppv3&page=formulas/tevol_trotter. But this method only deal with NN interaction, right?
I want to calculate 2D Heisenberg model real-time correlation function. my strategy is convert 2D lattice (e.g. square lattice) to 1D chain with effective LONG RANGE interaction. so in this case, can I use Trotter gate method to compute real-time correlation function ? Thanks!

answered by (47.7k points)

Hi, thanks for the question. I think the core of your question is: what are the best ways to use ITensor to time-evolve systems which don't have nearest-neighbor interactions (in a 1D, MPS path order sense, which includes 2D systems).

To understand all of these methods, I'd recommend the review article by Paeckel:
https://arxiv.org/abs/1901.05824
as well as some of the material adapted from it on the tensornetwork.org website:
http://tensornetwork.org/mps/algorithms/timeevo/

There are three main methods available in connection with ITensor, and let me briefly list the pros and cons:

1. using an MPO representation of the time evolution operator U=exp(-i tau H):

Pros: it is easy to set this up using AutoMPO and the toExpH function, so it is good for testing the other methods too

Cons: it is not very accurate in a few different ways, including having a large sensitivity to finite-time-step effects and also can result in MPS with rather large bond dimensions, more than what more accurate methods can provide

More information including a paper reference here:
http://itensor.org/docs.cgi?vers=cppv3&page=formulas/tevol_mps_mpo

2. using the Trotter method but with additional "swaps" or "swap gates":

Pros: this method is the most reliable, in terms of being sure of convergence once it is implemented in a correct way. It is also not too hard to program. It can give very good accuracy too.

Cons: we don't have this available in a fully automatic way in the C++ version of ITensor (we do now in the Julia version, though). So you will have to implement the "swap" moves yourself, which temporarily bring further-neighbor sites together to become nearest neighbor.

3. using the TDVP method

Pros: this method is the best one to use, if you want the most state-of-the-art accuracy and efficiency. It has a very small time-step error and gives very accurate results, with relatively low bond dimensions. You can take rather large time steps for efficiency while still getting good results.

Cons: it is the most technical of the three to program. Also caution it can fail to converge if the initial state of the MPS has a poor basis, such as a product state or a state which has small overlap with the ideal state at a slightly later time. One way to overcome this initial-state problem is to start by using one of the other techniques above (Trotter is recommended for this) for a short time, then switch to TDVP. Or switch from one-site to two-site TDVP. Finally, one can use newer, more sophisticated TDVP convergence techniques such as in this recent paper: https://arxiv.org/abs/2005.06104

The TDVP method has been implemented in ITensor as an external code, and is available here:
https://github.com/ITensor/TDVP

Best regards,
Miles