I recently encountered a puzzling issue while using TDVP, and it took me a long time to find the root cause. Therefore, I would greatly appreciate any assistance.
L = 2
tₜₒₜₐₗ = 10
τ = 0.01
tₛₜₑₚₛ = convert(Int64, tₜₒₜₐₗ /τ)
sites = siteinds("Boson",2L)
states = ["1","1","0","0"]
ψ₀ = MPS(sites,states)
os = OpSum()
os += "a", 2, "a†", 3
os += "a", 3, "a†", 2
ℋ = MPO(os,sites)
ψₜ = ψ₀
N̂ₛₜₑₚₛ = []
for i in 1:tₛₜₑₚₛ
N̂ = expect(ψₜ ,"N")
push!(N̂ₛₜₑₚₛ ,N̂')
ψₜ = tdvp(ℋ,ψₜ ,-im*τ,ishermitian=true)
end
In the above code, I created a boson model with an initial state of “1100” and applied the Hamiltonian of a_{2}^{\dagger} a_{3} + a_{3}^{\dagger} a_{2}. After drawing the graph of the number of particles at each site over time, as we expected, the particles oscillated back and forth between the second and third sites.
But when I modify the Hamiltonian to a_{1}^{\dagger} a_{3} + a_{3}^{\dagger} a_{1}
os = OpSum()
os += "a", 1, "a†", 3
os += "a", 3, "a†", 1
ℋ = MPO(os,sites)
Strange things happened, as the particles seemed to be fixed in place and did not oscillate between the first and third sites as expected.
At the same time, I still used TEBD for the same time evolution, and luckily, I got the image I wanted to see.
L = 2
tₜₒₜₐₗ = 10
τ = 0.1
tₛₜₑₚₛ = convert(Int64, tₜₒₜₐₗ /τ)
sites = siteinds("Boson",2L)
states = ["1","1","0","0"]
ψ₀ = MPS(sites,states)
gates=ITensor[]
tg=op("Adag",sites[1])*op("A",sites[3])
tg+=op("Adag",sites[3])*op("A",sites[1])
tevol=exp(-im*τ/2*tg)
push!(gates,tevol)
append!(gates,reverse(gates))
ψₜ = ψ₀
for i in 1:tₛₜₑₚₛ
N̂=expect(ψₜ,"N")
push!( N̂ₛₜₑₚₛ , N̂')
ψₜ=apply(gates,ψₜ)
end
Therefore, I would like to know where I made mistakes or made some thought-provoking mistakes when using TDVP to calculate Hamiltonians with long-range interactions. Please point them out for me. Thank you very much!