ITensor TDVP Issue: Extra Qubit Acting as a Barrier

Hello everyone,

I am using TDVP to study a spin chain. The Hamiltonian only includes a hopping term. The initial state is a spin-up at position 1 and all the rest are spin-down. The system exhibits ballistic transport, as expected.
In the next step, I introduced an extra qubit at position 4, which does not interact with any other qubits in the system. That is, there are nearest-neighbor hoppings on both sides of qubit 4 and a next-nearest-neighbor hopping between sites 3 and 5. Physically, this model should still exhibit ballistic transport. However, in TDVP, qubit 4 appears to act as a barrier, reflecting transport instead. This issue does not occur when using TEBD or exact methods.

I sincerely appreciate your insights and comments!

Haoyuan

using ITensorMPS, ITensors, Plots

# 9 qubits with one jumping qubit at position 4
N = 10
sites = siteinds("S=1/2",N)
spinInd = [1:3..., 5:10...]

os = OpSum()
for j in 1:length(spinInd)-1
    os += 1/2,"S+",spinInd[j],"S-",spinInd[j+1]
    os += 1/2,"S-",spinInd[j],"S+",spinInd[j+1]
end

H = MPO(os,sites)

psiIni = MPS(sites, ["Up", fill("Dn", N-1)...])
psis = Vector{MPS}([psiIni])
psi = psiIni

∆t = 0.01
T = 10.0

χ = 100
ctf = 1e-13

for (i, t) in enumerate(∆t:∆t:T)
    psi = tdvp(H, -im * ∆t, psi; time_step = -im * ∆t, cutoff = ctf, maxdim = χ, outputlevel=0, normalize=true)
    push!(psis, psi)
end

# Plotting
data = zeros(length(0:∆t:T), length(spinInd))
for (i, psi) in enumerate(psis)
    data[i,:] = real.(expect(psi, "S+ * S-"; sites = spinInd))
end
heatmap(0:∆t:T, 1:length(spinInd), data', yflip = true)

Hi Haoyuan,
Sorry you are running into this problem, but I am not totally surprised since one weakness of TDVP (at least in its current form in ITensorMPS)is that it can fail to properly expand the basis of the MPS to capture the state at the next time step.

One way around this is to intersperse calls to the “global subspace expansion” method, coded as the expand functoin in ITensorMPS, which enriches the state basis using knowledge of the Hamiltonian without actually changing the properties of the wavefunction.

To learn about the expand function, please read the docstring for the expand function from the ITensorMPS package. (By typing julia> ? expand in the console.)

Thank you, Miles!