Skip to content

Commit db7ae37

Browse files
authored
Fix row and column mismatch in correlation_length with unit cells (#198)
* fix unit cell * bump version * add test * use _next * do not include cell size in corr length * Revert "bump version" This reverts commit 75cf626.
1 parent a76475f commit db7ae37

3 files changed

Lines changed: 39 additions & 11 deletions

File tree

src/algorithms/toolbox.jl

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -276,29 +276,25 @@ MPSKit.correlation_length(state, env::CTMRGEnv; num_vals=2, kwargs...) =
276276
_correlation_length(env; num_vals, kwargs...)
277277

278278
function _correlation_length(env::CTMRGEnv; num_vals=2, kwargs...)
279-
T = scalartype(env)
280-
ξ_h = Vector{real(T)}(undef, size(env, 2))
281-
ξ_v = Vector{real(T)}(undef, size(env, 3))
282-
λ_h = Vector{Vector{T}}(undef, size(env, 2))
283-
λ_v = Vector{Vector{T}}(undef, size(env, 3))
279+
_, n_rows, n_cols = size(env)
284280

285281
# Horizontal
286-
λ_h = map(1:size(env, 2)) do r
282+
λ_h = map(1:n_rows) do r
287283
above = InfiniteMPS(env.edges[NORTH, r, :])
288-
below = InfiniteMPS(_dag.(env.edges[SOUTH, r, :]))
284+
below = InfiniteMPS(_dag.(env.edges[SOUTH, _next(r, n_rows), :]))
289285
vals = MPSKit.transfer_spectrum(above; below, num_vals, kwargs...)
290286
return vals ./ abs(vals[1]) # normalize largest eigenvalue
291287
end
292-
ξ_h = map(λ_row -> -1 / log(abs(λ_row[2])), λ_h)
288+
ξ_h = map(λ -> -1 / log(abs(λ[2])), λ_h)
293289

294290
# Vertical
295-
λ_v = map(1:size(env, 3)) do c
291+
λ_v = map(1:n_cols) do c
296292
above = InfiniteMPS(env.edges[EAST, :, c])
297-
below = InfiniteMPS(_dag.(env.edges[WEST, :, c]))
293+
below = InfiniteMPS(_dag.(env.edges[WEST, :, _next(c, n_cols)]))
298294
vals = MPSKit.transfer_spectrum(above; below, num_vals, kwargs...)
299295
return vals ./ abs(vals[1]) # normalize largest eigenvalue
300296
end
301-
ξ_v = map(λ_row -> -1 / log(abs(λ_row[2])), λ_v)
297+
ξ_v = map(λ -> -1 / log(abs(λ[2])), λ_v)
302298

303299
return ξ_h, ξ_v, λ_h, λ_v
304300
end

test/ctmrg/correlation_length.jl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Test: @test, @testset
2+
using TensorKit: , , SU2Irrep, Vect, permute, truncdim, truncbelow
3+
using MPSKit: correlation_length, leading_boundary
4+
using PEPSKit: CTMRGEnv, InfinitePEPS
5+
6+
@testset "Correlation length" begin
7+
# regression test for https://github.com/QuantumKitHub/PEPSKit.jl/issues/197
8+
vD = Vect[SU2Irrep](1//2 => 1)
9+
vd = Vect[SU2Irrep](2 => 1)
10+
tAKLT_A = ones(vd vD vD vD vD)
11+
tAKLT_B = permute(adjoint(tAKLT_A), (5,), (1, 2, 3, 4))
12+
13+
ψ = InfinitePEPS([tAKLT_A tAKLT_B; tAKLT_B tAKLT_A])
14+
trscheme = truncdim(20) & truncbelow(1e-12)
15+
boundary_alg = (; tol=1e-10, trscheme=trscheme, maxiter=1, verbosity=0)
16+
env0 = CTMRGEnv(randn, Float64, ψ, oneunit(vD))
17+
env, info_ctmrg = leading_boundary(env0, ψ; boundary_alg...)
18+
19+
ξ_h, ξ_v, λ_h, λ_v = correlation_length(ψ, env)
20+
@test ξ_h isa Vector{Float64}
21+
@test size(ξ_h) == (2,)
22+
@test all(isfinite.(ξ_h))
23+
@test all(ξ_h .> 0)
24+
25+
@test ξ_v isa Vector{Float64}
26+
@test size(ξ_v) == (2,)
27+
@test all(isfinite.(ξ_v))
28+
@test all(ξ_v .> 0)
29+
end

test/runtests.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ end
3232
@time @safetestset "PEPO" begin
3333
include("ctmrg/pepo.jl")
3434
end
35+
@time @safetestset "correlation length" begin
36+
include("ctmrg/correlation_length.jl")
37+
end
3538
end
3639
if GROUP == "ALL" || GROUP == "GRADIENTS"
3740
@time @safetestset "CTMRG gradients" begin

0 commit comments

Comments
 (0)