Skip to content

Commit 6ca0df2

Browse files
authored
Fix time dependent integral of TDVP and TDVP2 (#279)
* try fix * try fix * format documents
1 parent 93a7e80 commit 6ca0df2

File tree

2 files changed

+17
-4
lines changed

2 files changed

+17
-4
lines changed

src/algorithms/timestep/tdvp.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ function timestep!(ψ::AbstractFiniteMPS, H, t::Number, dt::Number, alg::TDVP,
7878
ψ.AC[i] = integrate(h_ac, ψ.AC[i], t, dt / 2, alg.integrator)
7979

8080
h_c = ∂∂C(i, ψ, H, envs)
81-
ψ.C[i] = integrate(h_c, ψ.C[i], t, -dt / 2, alg.integrator)
81+
ψ.C[i] = integrate(h_c, ψ.C[i], t + dt / 2, -dt / 2, alg.integrator)
8282
end
8383

8484
# edge case
@@ -91,7 +91,7 @@ function timestep!(ψ::AbstractFiniteMPS, H, t::Number, dt::Number, alg::TDVP,
9191
ψ.AC[i] = integrate(h_ac, ψ.AC[i], t + dt / 2, dt / 2, alg.integrator)
9292

9393
h_c = ∂∂C(i - 1, ψ, H, envs)
94-
ψ.C[i - 1] = integrate(h_c, ψ.C[i - 1], t + dt / 2, -dt / 2, alg.integrator)
94+
ψ.C[i - 1] = integrate(h_c, ψ.C[i - 1], t + dt, -dt / 2, alg.integrator)
9595
end
9696

9797
# edge case
@@ -148,7 +148,8 @@ function timestep!(ψ::AbstractFiniteMPS, H, t::Number, dt::Number, alg::TDVP2,
148148
ψ.AC[i + 1] = (complex(nc), _transpose_front(nar))
149149

150150
if i != (length(ψ) - 1)
151-
ψ.AC[i + 1] = integrate(∂∂AC(i + 1, ψ, H, envs), ψ.AC[i + 1], t, -dt / 2,
151+
ψ.AC[i + 1] = integrate(∂∂AC(i + 1, ψ, H, envs), ψ.AC[i + 1], t + dt / 2,
152+
-dt / 2,
152153
alg.integrator)
153154
end
154155
end
@@ -164,7 +165,7 @@ function timestep!(ψ::AbstractFiniteMPS, H, t::Number, dt::Number, alg::TDVP2,
164165
ψ.AC[i] = (complex(nc), _transpose_front(nar))
165166

166167
if i != 2
167-
ψ.AC[i - 1] = integrate(∂∂AC(i - 1, ψ, H, envs), ψ.AC[i - 1], t + dt / 2,
168+
ψ.AC[i - 1] = integrate(∂∂AC(i - 1, ψ, H, envs), ψ.AC[i - 1], t + dt,
168169
-dt / 2, alg.integrator)
169170
end
170171
end

test/algorithms.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,18 @@ end
356356
@test E Et atol = 1e-8
357357
end
358358

359+
Ht2 = MultipliedOperator(H, t -> t < 0 ? error("t < 0!") : 4) +
360+
MultipliedOperator(H, 1.45)
361+
@testset "Finite TimeDependent LazySum (fix negative t issue) $(alg isa TDVP ? "TDVP" : "TDVP2")" for alg in
362+
algs
363+
ψ, envs = timestep(ψ₀, Ht2, 0.0, dt, alg)
364+
E = expectation_value(ψ, Ht2(0.0), envs)
365+
366+
ψt, envst = timestep(ψ₀, Ht2, 0.0, dt, alg)
367+
Et = expectation_value(ψt, Ht2(0.0), envst)
368+
@test E Et atol = 1e-8
369+
end
370+
359371
H = repeat(force_planar(heisenberg_XXX(; spin=1)), 2)
360372
ψ₀ = InfiniteMPS([ℙ^3, ℙ^3], [ℙ^50, ℙ^50])
361373
E₀ = expectation_value(ψ₀, H)

0 commit comments

Comments
 (0)