Skip to content

Commit 24abaed

Browse files
authored
expval(::FiniteMPS, ::FiniteMPOHamiltonian) now checks where data is precomputed (#248)
1 parent 550165d commit 24abaed

File tree

1 file changed

+5
-12
lines changed

1 file changed

+5
-12
lines changed

src/operators/mpohamiltonian.jl

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -578,19 +578,12 @@ end
578578

579579
function TensorKit.dot(bra::FiniteMPS, H::FiniteMPOHamiltonian, ket::FiniteMPS=bra,
580580
envs=environments(bra, H, ket))
581-
# TODO: find where environments are already computed and use that site
582581
@assert ket === bra "TBA"
583-
Nhalf = length(bra) ÷ 2
584-
585-
h = H[Nhalf]
586-
GL = leftenv(envs, Nhalf, bra)
587-
GR = rightenv(envs, Nhalf, ket)
588-
AC = ket.AC[Nhalf]
589-
AC̄ = bra.AC[Nhalf]
590-
E = zero(promote_type(scalartype(bra), scalartype(H), scalartype(ket)))
591-
E = @plansor GL[1 2; 3] * AC[3 7; 5] * GR[5 8; 6] * conj(AC̄[1 4; 6]) *
592-
h[2 4; 7 8]
593-
return E
582+
# find where environments had already been computed
583+
N = something(findfirst(i -> bra.ARs[i] !== envs.rdependencies[i], 1:length(bra)),
584+
length(bra) ÷ 2)
585+
return contract_mpo_expval(ket.AC[N], leftenv(envs, N, bra), H[N],
586+
rightenv(envs, N, bra), bra.AC[N])
594587
end
595588

596589
function Base.isapprox(H₁::FiniteMPOHamiltonian, H₂::FiniteMPOHamiltonian;

0 commit comments

Comments
 (0)