Hi, for the given Hamiltonian below, 2-site TDVP (v0.4 as well as v0.3) is always stuck in the initial product state in its real-time evolution. It’s happening not just with the specific initial state written below but also with a few other product states that are relevant to me for this model. It’s the first time I am seeing 2-TDVP being unable to get out of the initial state. Please let me know if it’s something I am doing trivially wrong, and if not so then if there’s some way to resolve this issue.
N = 40
τ = 0.01
T = 1
s = siteinds("Qubit",2*N; conserve_qns=false)
mu1 = 1
mu2 = 1
x = 1
os1 = OpSum()
for j=1:2*N-2
os1 += -x/4,"X + iY",j,"Z",j+1,"X - iY",j+2
os1 += -x/4,"X - iY",j,"Z",j+1,"X + iY",j+2
end
for j=1:N
os1 += mu1/2*(-1)^(j+1),"Id",2*j-1
os1 += mu1/2*(-1)^(j+1),"Z",2*j-1
os1 += mu2/2*(-1)^(j+1),"Id",2*j
os1 += mu2/2*(-1)^(j+1),"Z",2*j
end
for j=1:N-1
osj = OpSum()
for k=1:j
osj += (-1)^k,"Id",k
osj += 1/2,"Z",2*k-1
osj += 1/2,"Z",2*k
end
os1 += Ops.expand(osj*osj)
end
H = MPO(os1,s)
function step(; sweep, bond, half_sweep)
if bond == 1 && half_sweep == 2
return sweep
end
return nothing
end
function current_time(; current_time, bond, half_sweep)
if bond == 1 && half_sweep == 2
return current_time
end
return nothing
end
function return_state(; state, bond, half_sweep)
if bond == 1 && half_sweep == 2
return state
end
return nothing
end
obs = observer("steps" => step, "times" => current_time, "psis" => return_state)
ψ0 = MPS(s, n -> isodd(n) ? "Dn" : "Up")
@show inner(ψ0', H, ψ0) / inner(ψ0, ψ0)
@time ψf = tdvp(H,-im*T,ψ0; time_step=-im*τ, reverse_step=true, normalize=true, maxdim=20, cutoff=1e-10, (observer!)=obs, outputlevel=1, updater_kwargs=(; krylovdim=6, tol=1e-10, maxiter=200), nsite=2)
@show norm(ψ0)
@show norm(ψf)
steps = obs.steps
psis = obs.psis
times = obs.times