Dear ITensor Team!
I have implemented TEBD for a research project, and now I am wondering if there is a way to track the accumulated error.
For Illustration purposes, consider a very simple code
using ITensors
using ITensorMPS
N = 10
sites = siteinds("Fermion", N)
ψ = random_mps(sites, linkdims = 1)
TEBD_Gates = [exp(-1im*(op("Cdag", sites[i])*op("C", sites[i+1]) + op("C", sites[i+1])*op("Cdag", sites[i]))) for i = 1:N-1];
ψ_t = ψ
for i = 1:20
ψ_t = apply(TEBD_Gates, ψ_t; maxdim = 32, cutoff = 0.0)
end
For N = 10, the maximum bond dimension would be 2 ^5 = 32. There is no truncation error (although some error may arise from the Taylor expansion when comparing with the exact time evolution operator). However, depending on the values of cutoff and maxdim, this can change.
I know that cutoff is the truncation error considered by svd() insideapply(). I was testing the SVD function from ITensors, and I realized that given some cutoff, svd() keeps as many singular values as it is required to have \cfrac{\sum_{k=\chi + 1}^{32} \lambda_k^2 }{\sum_{k=1}^{32} \lambda_k^2} = cutoff.
I assume that if svd() works in this way, then apply() should work similarly. So, if I apply all TEBD Gates, it tries to take at most singular values to guarantee a given cutoff. Now in my real code, I have a system of electrons with N=48 (it is impossible to keep all information), I am not sure what maxdim would be enough to represent the state, and I need to perform a very long time evolution, so I usually do something like apply(TEBD_Gates, ψ_t; maxdim = 800, cutoff = 1e-10) because it has a decent running time. After some sweeps, the bond dimension of the MPS becomes 800 in almost all bonds, so at that point, the code is actually truncating by maxdim instead of cutoff. So, my truncation error is not really cutoff (If I do not include maxdim inside apply, the bond dimension keeps increasing without limit).
Is there a way to know what is the truncation error from the truncation done by apply with maxdim? I do not have access to all singular values, so I can not calculate it by myself. Am I missing something? Is there a better measurement of accumulated error for TEBD? I just want some notion of truncation error to know if I can trust on my TEBD results or if I should increase the bond dimension.