Skip to content

Commit 167abfb

Browse files
authored
Add finite_mps for slicing Infinite MPS to finite MPS function, example of computing the correlation matrix
1 parent 975a2f8 commit 167abfb

File tree

3 files changed

+25
-0
lines changed

3 files changed

+25
-0
lines changed

examples/vumps/vumps_hubbard_extended.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,19 +120,26 @@ Sz_finite = ITensors.expect(ψfinite, "Sz")[nfinite:(nfinite + 1)]
120120

121121
energy_exact = reference(model, Observable("energy"); U=model_params.U / model_params.t)
122122

123+
corr_infinite = correlation_matrix(finite_mps(ψ, 1:10), "Cdagup", "Cup"; sites=2:11)
124+
corr_finite = correlation_matrix(
125+
ψfinite, "Cdagup", "Cup"; sites=Int(Nfinite / 2):Int(Nfinite / 2 + 9)
126+
)
127+
123128
println("\nResults from VUMPS")
124129
@show energy_infinite
125130
@show energy_exact
126131
@show Nup
127132
@show Ndn
128133
@show Nup .+ Ndn
129134
@show Sz
135+
@show corr_infinite
130136

131137
println("\nResults from DMRG")
132138
@show energy_finite
133139
@show Nup_finite
134140
@show Ndn_finite
135141
@show Nup_finite .+ Ndn_finite
136142
@show Sz_finite
143+
@show corr_finite
137144

138145
nothing

src/ITensorInfiniteMPS.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ export Cell,
8181
translator,
8282
tdvp,
8383
vumps,
84+
finite_mps,
8485
,
8586
,
8687
×

src/infinitecanonicalmps.jl

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,23 @@ function InfMPS(s::CelledVector, f::Function)
148148
return ψ = InfiniteCanonicalMPS(ψL, ψC, ψR)
149149
end
150150

151+
function finite_mps::InfiniteCanonicalMPS, range::AbstractRange)
152+
@assert isone(step(range))
153+
N = length(range)
154+
ψ_finite = ψ.AL[range]
155+
ψ_finite[N] *= ψ.C[last(range)]
156+
l0 = linkind.AL, first(range) - 1 => first(range))
157+
l̃0 = sim(l0)
158+
lN = linkind.AR, last(range) => last(range) + 1)
159+
l̃N = sim(lN)
160+
δl0 = δ(dag(l̃0), l0)
161+
δlN = δ(dag(l̃N), lN)
162+
ψ_finite[1] *= δl0
163+
ψ_finite[N] *= dag(δlN)
164+
ψ_finite = MPS([dag(δl0); [ψ_finiteᵢ for ψ_finiteᵢ in ψ_finite]; δlN])
165+
set_ortho_lims!(ψ_finite, (N + 1):(N + 1))
166+
return ψ_finite
167+
end
151168
function ITensors.expect::InfiniteCanonicalMPS, o::String, n::Int)
152169
s = siteinds(only, ψ.AL)
153170
O = op(o, s[n])

0 commit comments

Comments
 (0)