Choosing dt for time evolve

General discussions on the ideas behind the algorithm.
Post Reply
Posts: 2
Joined: 17 Oct 2023, 02:22

Choosing dt for time evolve

Post by phy-jay »

I am doing a periodic boundary Ising model with N sites (say 40 sites) and I am time evolving with the following code:

Code: Select all

#Time evolution parameters
evol_params = {
    'compression_method': 'SVD', ### same results for 'SVD' and 'variational'
    'trunc_params': {"chi_max": chi,"svd_min": 1e-10,},
evol = mpo_evolution.ExpMPOEvolution(psi, M, evol_params)
for t in range(t_max):
    psi_t =
It turns out that the quantities of my interest are converging to different values for different choices of dt.
What should I keep in mind to choose dt for N (say 40) sites? What choice of dt ensures that my results converge to the same value?
User avatar
Site Admin
Posts: 435
Joined: 21 Jul 2018, 12:52
Location: TU Munich

Re: Choosing dt for time evolve

Post by Johannes »

There's no simple, generic rule how large/small dt has to be to ensure convergence,

I'm somewhat alarmed by the "periodic boundary conditions". By default, in TeNPy this would just give you one (or ~Ly, if you have a 2D torus) very long-range couplings between the ends of the MPS. Both TDVP and the ExpMPOEvolution might not correctly include those long-range terms into the time evolution - TDVP focuses on the MPS tangent space, which might project it out (if the coupling is not diagonal), and the W_I/W_II approximations to U=exp(-iHdt) in the ExpMPOEvolution is also just correct for "non-overlapping" terms. In both cases, a tiny dt should eventually get it correct, but tiny might be really tiny, blowing up the evolution cost - and eventually also the truncation error, since you need to truncate after each step!

If you really need the periodic bc, you should hence use the lattice with a order="folded" parameter, see here, such that you don't have a single long-range coupling, but many couplings of twice the range compared to open bc.
Post Reply