@@ -28,10 +28,13 @@ function find_groundstate(ost::InfiniteMPS, H, alg::IDMRG, envs = environments(o
2828 ϵ:: Float64 = calc_galerkin (ost, H, ost, envs)
2929 ψ = copy (ost)
3030 log = IterLog (" IDMRG" )
31- local iter
31+ local iter, E_current
3232
3333 LoggingExtras. withlevel (; alg. verbosity) do
34- @infov 2 loginit! (log, ϵ, expectation_value (ψ, H, envs))
34+ @infov 2 begin
35+ E_current = expectation_value (ψ, H, envs)
36+ loginit! (log, ϵ, E_current)
37+ end
3538 for outer iter in 1 : (alg. maxiter)
3639 alg_eigsolve = updatetol (alg. alg_eigsolve, iter, ϵ)
3740 C_current = ψ. C[0 ]
@@ -63,13 +66,28 @@ function find_groundstate(ost::InfiniteMPS, H, alg::IDMRG, envs = environments(o
6366 ϵ = norm (C_current - ψ. C[0 ])
6467
6568 if ϵ < alg. tol
66- @infov 2 logfinish! (log, iter, ϵ, expectation_value (ψ, H, envs))
69+ @infov 2 begin
70+ E_next = expectation_value (ψ, H, envs)
71+ ΔE = E_next - E_current
72+ E_current = E_next
73+ logfinish! (log, iter, ϵ, ΔE)
74+ end
6775 break
6876 end
6977 if iter == alg. maxiter
70- @warnv 1 logcancel! (log, iter, ϵ, expectation_value (ψ, H, envs))
78+ @warnv 1 begin
79+ E_next = expectation_value (ψ, H, envs)
80+ ΔE = E_next - E_current
81+ E_current = E_next
82+ logcancel! (log, iter, ϵ, ΔE)
83+ end
7184 else
72- @infov 3 logiter! (log, iter, ϵ, expectation_value (ψ, H, envs))
85+ @infov 3 begin
86+ E_next = expectation_value (ψ, H, envs)
87+ ΔE = E_next - E_current
88+ E_current = E_next
89+ logiter! (log, iter, ϵ, ΔE)
90+ end
7391 end
7492 end
7593 end
0 commit comments