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:
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:
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.
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: