Skip to content

Commit 655d87a

Browse files
committed
improve type stability
1 parent d5b7e59 commit 655d87a

File tree

2 files changed

+13
-45
lines changed

2 files changed

+13
-45
lines changed

src/algorithms/excitation/quasiparticleexcitation.jl

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -348,46 +348,16 @@ function effective_excitation_renormalization_energy(H::Union{InfiniteMPO,
348348
lenvs,
349349
renvs)
350350
ψ_left = ϕ.left_gs
351-
E_left = map(1:length(ϕ)) do site
352-
return contract_mpo_expval(ψ_left.AC[site], leftenv(lenvs, site, ψ_left),
353-
H[site], rightenv(lenvs, site, ψ_left))
354-
end
355-
356-
ϕ.trivial && return E_left
357-
358351
ψ_right = ϕ.right_gs
359-
E_right = map(1:length(ϕ)) do site
360-
return contract_mpo_expval(ψ_right.AC[site], leftenv(renvs, site, ψ_right),
361-
H[site], rightenv(renvs, site, ψ_right))
362-
end
363-
364-
return (E_left .+ E_right) ./ 2
365-
end
366-
367-
function effective_excitation_renormalization_energy(H, ϕ, lenvs, renvs)
368-
E_left = map(1:length(ϕ)) do loc
369-
AC = ϕ.left_gs.AC[loc]
370-
GL = leftenv(lenvs, loc, ϕ.left_gs)
371-
GR = rightenv(lenvs, loc, ϕ.left_gs)
372-
return sum(keys(H[loc]); init=zero(scalartype(ϕ))) do (j, k)
373-
return @plansor conj(AC[2 6; 4]) * GL[j][2 5; 3] * AC[3 7; 1] *
374-
H[loc][j, k][5 6; 7 8] *
375-
GR[k][1 8; 4]
376-
end
377-
end
378-
379-
ϕ.trivial && return E_left
380-
381-
E_right = map(1:length(ϕ)) do loc
382-
AC = ϕ.right_gs.AC[loc]
383-
GL = leftenv(renvs, loc, ϕ.right_gs)
384-
GR = rightenv(renvs, loc, ϕ.right_gs)
385-
return sum(keys(H[loc]); init=zero(scalartype(ϕ))) do (j, k)
386-
return @plansor conj(AC[2 6; 4]) * GL[j][2 5; 3] * AC[3 7; 1] *
387-
H[loc][j, k][5 6; 7 8] *
388-
GR[k][1 8; 4]
352+
E = Vector{scalartype(ϕ)}(undef, length(ϕ))
353+
for i in eachindex(E)
354+
E[i] = contract_mpo_expval(ψ_left.AC[i], leftenv(lenvs, i, ψ_left),
355+
H[i], rightenv(lenvs, i, ψ_left))
356+
if !ϕ.trivial
357+
E[i] += contract_mpo_expval(ψ_right.AC[i], leftenv(renvs, i, ψ_right),
358+
H[i], rightenv(renvs, i, ψ_right))
359+
E[i] /= 2
389360
end
390361
end
391-
392-
return (E_left .+ E_right) ./ 2
362+
return E
393363
end

src/states/quasiparticle_state.jl

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,13 +63,11 @@ function RightGaugedQP(datfun, left_gs, right_gs=left_gs;
6363
end
6464

6565
#gauge dependent code
66-
function Base.similar(v::LeftGaugedQP, T=scalartype(v))
67-
return LeftGaugedQP(v.left_gs, v.right_gs, v.VLs, map(e -> similar(e, T), v.Xs),
68-
v.momentum)
66+
function Base.similar(v::LeftGaugedQP, ::Type{T}=scalartype(v)) where {T<:Number}
67+
return LeftGaugedQP(v.left_gs, v.right_gs, v.VLs, similar.(v.Xs, T), v.momentum)
6968
end
70-
function Base.similar(v::RightGaugedQP, T=scalartype(v))
71-
return RightGaugedQP(v.left_gs, v.right_gs, map(e -> similar(e, T), v.Xs), v.VRs,
72-
v.momentum)
69+
function Base.similar(v::RightGaugedQP, ::Type{T}=scalartype(v)) where {T<:Number}
70+
return RightGaugedQP(v.left_gs, v.right_gs, similar.(v.Xs, T), v.VRs, v.momentum)
7371
end
7472

7573
Base.getindex(v::LeftGaugedQP, i::Int) = v.VLs[mod1(i, end)] * v.Xs[mod1(i, end)]

0 commit comments

Comments
 (0)