TDVP with time dependent hamiltonian in ITensorMPS.jl v0.4

Hi everyone,

With the release of v0.4 of julia ITensorMPS, TimeDependentSum is no longer available following the removal of the ODE-solver helper infrastructure (see Drop OrdinaryDiffEqTsit5 dependency and ODE-solver helpers by mtfishman · Pull Request #212 · ITensor/ITensorMPS.jl · GitHub ).

I found this feature extremely useful for simulations of driven systems, for example when running TDVP with a Hamiltonian of the form H(t) = f(t)^* \hat{a} + f(t) \hat{a}^{\dagger} + H_{\mathrm{int}}.

I completely understand the motivation for removing the heavy OrdinaryDiffEqTsit5 dependency. While implementing a custom updater (ODE, Krylov, or something else) is still manageable, reproducing all of the functionality of TimeDependentSum correctly and efficiently seems significantly more involved.

From what I understand, the alternative now is to do TDVP one step at a time while rebuilding the Hamiltonian at each step. But this feels less efficient and also less convenient to write/read. So I was wondering:

  • Was there a deeper reason for removing TimeDependentSum itself?

  • Were there stability or maintenance issues associated with it?

  • Is there now a recommended approach for TDVP with explicitly time-dependent Hamiltonians?

I also have a more technical question. My understanding is that TimeDependentSum allowed TDVP to reuse/store the projMPOs associated with the different terms in the sum, reducing the amount of work required at each time step. Is that correct? If so, that would seem like a strong practical advantage over repeatedly performing one-step TDVP evolutions with rebuilt Hamiltonians.

Thank you very much for maintaining this excellent package!

Sorry for the removal. It was always a bit of an awkward and experimental thing to have in the library in the first place, and we are trying to slim down our libraries and CI to make maintenance easier as we develop new directions.

Also, part of my motivation for removing it was that it really doesn’t need to be in the library at all, i.e. it is just a different kind of operator input into the TDVP code that anyone can define themselves. So, if you want to keep using it, you can just copy the source code for it (ITensorMPS.jl/src/solvers/timedependentsum.jl at v0.3.45 · ITensor/ITensorMPS.jl · GitHub, etc.) into your own codebase and continue using it like you were using it before.