+1 vote
asked by (320 points)

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!

1 Answer

0 votes
answered by (52.6k 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:
as well as some of the material adapted from it on the tensornetwork.org website:

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:

  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:

Best regards,

Welcome to ITensor Support Q&A, where you can ask questions and receive answers from other members of the community.

Formatting Tips:
  • To format code, indent by four spaces
  • To format inline LaTeX, surround it by @@ on both sides
  • To format LaTeX on its own line, surround it by $$ above and below
  • For LaTeX, it may be necessary to backslash-escape underscore characters to obtain proper formatting. So for example writing \sum\_i to represent a sum over i.
If you cannot register due to firewall issues (e.g. you cannot see the capcha box) please email Miles Stoudenmire to ask for an account.

To report ITensor bugs, please use the issue tracker.