Global subspace expansion algorithm for TDVP

Hi, I just have a quick question regarding the algorithm described in Phys. Rev. B 102, 094315 (2020) - Time-dependent variational principle with ancillary Krylov subspace. Is this also implemented in the Julia version? I’m currently using TDVP in Julia to solve Hamiltonians with long range interactions and I’m getting errors of around 1% after just one time step. I’m guessing this may be due to the projection error as I don’t have this issue with nearest neighbour interactions, but I can’t find any solution to the projection error other than this method.

1 Like

There is a pull request for it here: Basis extension method by emstoudenmire · Pull Request #24 · ITensor/ITensorTDVP.jl · GitHub which we still have to review and make some design decisions about, you could try that out.

You can also use TEBD (using the apply function in ITensors.jl) as a subspace expansion method if your interactions aren’t too long range.

Thanks that’s helpful, although we’ve now implemented our own version which we’ve nearly finished debugging.

Good to know, and sorry we weren’t quicker in getting ours merged (that’s on me). I’d be curious to know what parameter choices about it ended up working for you, as it seems there are many choices with that method such as how many times to apply the Hamiltonian in building the expanded basis and how often to use the basis expansion step.

No problem. This is what I’m currently working on, I want to find the parameter choices such that the leading error is just the finite step error from the chain of forwards and backwards evolutions. I’m currently having trouble with what the cutoff for tdvp is truly doing. If I set the cutoff = 1e-30, I obtain errors of 1e-10 compared to 1e-11 with cutoff=0. This obviously is quite confusing as to how it can create an error 20 magnitudes larger after the very first step, even with a state that occupies the full space to ensure no projection error. I then increased the output level to 3 to see what was happening and receive the following print statements:
Iteration: 1, Error: 3.09E-05
Iteration: 2, Error: 9.62E-09
Iteration: 3, Error: 1.59E-11
Number of iterations: 3
Iteration: 1, Error: 3.09E-05
Iteration: 2, Error: 9.62E-09
Iteration: 3, Error: 1.59E-11
Number of iterations: 3
Sweep 1, direction Base.Order.ForwardOrdering(), bond (1,2)
Truncated using cutoff=1.0E-30 maxdim=9.2E+18 mindim=1 current_time=0.0 + 0.0im
Trunc. err=0.00E+00, bond dimension 2
Iteration: 1, Error: 3.09E-05
Iteration: 2, Error: 9.04E-08
Iteration: 3, Error: 8.15E-10
Iteration: 4, Error: 3.07E-12
Number of iterations: 4
Iteration: 1, Error: 3.09E-05
Iteration: 2, Error: 9.04E-08
Iteration: 3, Error: 8.15E-10
Iteration: 4, Error: 3.07E-12
Number of iterations: 4
Sweep 1, direction Base.Order.ForwardOrdering(), bond (2,3) .

This continues along the MPS and then backwards to the start again. Clearly the errors printed are much larger than the cutoff, but don’t change when I change the cutoff so can’t be the cause of this issue. However, I can’t find where these print statements are in the source code so can only guess as to what they represent. Are these errors from the inexact solution of the local equations? If they are, where can I increase the number of Krylov vectors used to reduce this? Also, can you think of any reason why changing the cutoff by 1e-30 would cause changes in errors much larger than this?