Higher order time evolution in TEBD.

Hi, so I’d say as long as you have a Hamiltonian which is suitable for gate-based evolution and you have a clear need for higher-order time evolution, then using Trotter gates is currently the best approach.

You should be able to implement any arbitrary Trotter gate pattern using the kind of code in the tutorial you linked (MPS Time Evolution) so if you are not observing the scaling you expect I would bet it is due to a bug in your implementation. Please note, for example, that the part of the code tutorial where the gates are added in reversed order at the end is a specific pattern for the second-order Trotter pattern and may not generalize to higher orders in such a straightforward way.

One other techique you might want to investigate is the time-dependent variational principle (TDVP). We are putting together an ITensor package for that and it’s almost ready. TDVP can also perform higher-order integrations though I’m not an expert on that aspect of TDVP myself.

Finally, regarding MPO time evolution, we don’t currently offer an automatic feature for it in Julia ITensor. One reason is that in practice it hasn’t performed as well as TDVP (neither in terms of speed or accuracy), and yet TDVP has most of the same advantages as using MPOs. The main advantage of using MPOs or TDVP is that you can treat rather arbitrary Hamiltonians including ones with long-range interactions, while doing that with Trotter gates can be hard.

But again if your Hamiltonian is short ranged, then Trotter gates is a very good option. For most cases, here are the advantages / disadvantages I see:

Trotter gates:

  • [+] easy to implement
  • [+] does not get stuck in a local minimum or ever fail to give the correct answer
  • [-] can be slower than TDVP
  • [-] hard or costly to implement further-neighbor or long-range interactions

TDVP:

  • [+] can be more accurate than Trotter
  • [+] usually faster than Trotter, especially for more complicated Hamiltonians
  • [+] can take larger time steps without losing accuracy
  • [-] can get stuck in a local minimum or fail due to a poor basis (though there are fixes for this in many situations)
  • [-] can be a bit more technical to use, though a good package or code can help a lot

Also thanks for the kind words about ITensor!

1 Like