ITensor team,
I’m trying to time-evolve a Hubbard Hamiltonian, but, no matter the timescale, timestep, or maximum bond dimension, the expectation values of any given observable oscillate up and down without converging to a constant value, which disagrees with intuition and many papers on time evolution using TEBD. Here’s a minimal example for SvN, but the same thing happens with spin correlations, etc.
using ITensors, ITensorMPS
let
N = 200
Npart = 100
maxdim = 150
tau = 0.025
ttotal = 1.25
s = siteinds("Electron", N; conserve_qns=true)
U = 4.0
t = 1
gates = ITensor[]
for j in 1:(N - 1)
s1 = s[j]
s2 = s[j+1]
hj =
-t*op("Cdagup", s1) * op("Cup", s2) +
-t*op("Cdagup", s2) * op("Cup", s1) +
-t*op("Cdagdn", s1) * op("Cdn", s2) +
-t*op("Cdagdn", s2) *op("Cdn", s1) +
U/2*op("Nupdn", s1) * op("Id", s2) +
U/2*op("Id", s1) * op("Nupdn", s2)
Gj = exp(-im * tau/2 * hj)
push!(gates, Gj)
end
append!(gates, reverse(gates))
state = [isodd(n) ? "Up" : "Dn" for n in 1:N]
psi = MPS(s, state)
for t in 0.0:tau:ttotal
vonneuman_entropy = 0.0
b = 50
psi = orthogonalize!(psi, b)
U,S,V = svd(psi[b], (linkinds(psi, b-1)..., siteinds(psi, b)...))
for n in 1:dim(S, 1)
addition = S[n, n]^2
vonneuman_entropy -= addition * log2(addition)
end
@show vonneuman_entropy, t, maxlinkdim(psi)
t≈ttotal && break
psi = apply(gates, psi; maxdim)
normalize!(psi)
end
end
This code is so simple that I figured my problem is the result of a broad misunderstanding of TEBD in ITensor, so I figured this might be a good place to seek help.