Skip to content

Commit e161799

Browse files
committed
restore effective_excitation_hamiltonian
1 parent 2bc73cc commit e161799

File tree

2 files changed

+26
-15
lines changed

2 files changed

+26
-15
lines changed

src/algorithms/excitation/quasiparticleexcitation.jl

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,18 +260,35 @@ end
260260
Base.length(H::EffectiveExcitationHamiltonian) = length(H.operator)
261261

262262
function (H::EffectiveExcitationHamiltonian)(ϕ::QP; kwargs...)
263-
ϕ′ = similar(ϕ)
264263
qp_envs = environments(ϕ, H.operator, H.lenvs, H.renvs; kwargs...)
264+
return effective_excitation_hamiltonian(H.operator, ϕ, qp_envs, H.energy)
265+
end
266+
function (H::Multiline{<:EffectiveExcitationHamiltonian})(ϕ::MultilineQP; kwargs...)
267+
return Multiline(map((x, y) -> x(y; kwargs...), parent(H), parent(ϕ)))
268+
end
269+
270+
function effective_excitation_hamiltonian(H, ϕ, envs=environments(ϕ, H))
271+
E₀ = effective_excitation_renormalization_energy(H, ϕ, envs.leftenvs, envs.rightenvs)
272+
return effective_excitation_hamiltonian(H, ϕ, envs, E₀)
273+
end
274+
function effective_excitation_hamiltonian(H, ϕ, qp_envs, E)
275+
ϕ′ = similar(ϕ)
265276
tforeach(1:length(ϕ); scheduler=Defaults.scheduler[]) do loc
266-
ϕ′[loc] = _effective_excitation_local_apply(loc, ϕ, H.operator,
267-
H.energy[loc], qp_envs)
277+
ϕ′[loc] = _effective_excitation_local_apply(loc, ϕ, H, E[loc], qp_envs)
268278
return nothing
269279
end
270280
return ϕ′
271281
end
272282

273-
function (H::Multiline{<:EffectiveExcitationHamiltonian})(ϕ::MultilineQP; kwargs...)
274-
return Multiline(map((x, y) -> x(y; kwargs...), parent(H), parent(ϕ)))
283+
function effective_excitation_hamiltonian(H::MultilineMPO, ϕ::MultilineQP,
284+
envs=environments(ϕ, H))
285+
E₀ = map(effective_excitation_renormalization_energy, parent(H), parent(ϕ),
286+
parent(envs).leftenvs, parent(envs).rightenvs)
287+
return effective_excitation_hamiltonian(H, ϕ, envs, E₀)
288+
end
289+
function effective_excitation_hamiltonian(H::MultilineMPO, ϕ::MultilineQP, envs, E)
290+
return Multiline(map(effective_excitation_hamiltonian,
291+
parent(H), parent(ϕ), parent(envs), E))
275292
end
276293

277294
function _effective_excitation_local_apply(site, ϕ, H::MPOHamiltonian, E::Number, envs)

src/algorithms/toolbox.jl

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -227,22 +227,16 @@ function variance(state::InfiniteQP, H::InfiniteMPOHamiltonian, envs=environment
227227

228228
# I don't remember where the formula came from
229229
# TODO: this is probably broken
230-
E₀ = effective_excitation_renormalization_energy(H, state, envs.leftenvs,
231-
envs.rightenvs)
232-
Heff = EffectiveExcitationHamiltonian(H, envs.leftenvs, envs.rightenvs, E₀)
233-
E_ex = dot(state, Heff(state))
234-
230+
E_ex = dot(state, effective_excitation_hamiltonian(H, state, envs))
235231
rescaled_envs = environments(gs, H_regularized)
236232
GL = leftenv(rescaled_envs, 1, gs)
237233
GR = rightenv(rescaled_envs, 0, gs)
238234
E_f = @plansor GL[5 3; 1] * gs.C[0][1; 4] * conj(gs.C[0][5; 2]) * GR[4 3; 2]
239235

240236
H2 = H_regularized^2
241-
lenvs2 = environments(state.left_gs, H2)
242-
renvs2 = state.trivial ? lenvs2 : environments(state.right_gs, H2)
243-
E₁ = effective_excitation_renormalization_energy(H2, state, lenvs2, renvs2)
244-
Heff2 = EffectiveExcitationHamiltonian(H2, lenvs2, renvs2, E₁)
245-
return real(dot(state, Heff2(state)) - 2 * (E_f + E_ex) * E_ex + E_ex^2)
237+
238+
return real(dot(state, effective_excitation_hamiltonian(H2, state)) -
239+
2 * (E_f + E_ex) * E_ex + E_ex^2)
246240
end
247241

248242
function variance(ψ, H::LazySum, envs=environments(ψ, sum(H)))

0 commit comments

Comments
 (0)