Skip to content

Commit

Permalink
docs(projectors): improve documentation and fix issues
Browse files Browse the repository at this point in the history
* Enhance documentation of `compute_projector` function in projectors.jl
* Renormalize expanded corner tensors in sequential.jl and simultaneous.jl
* Refactor `sequential_projectors` and `simultaneous_projectors` to use `compute_projector`
* Remove unnecessary changes from previous commits

Note: Tests in heisenberg.jl and tf_ising.jl fail due to KrylovKit issue #110
(Jutho/KrylovKit.jl#110)
  • Loading branch information
Confusio committed Mar 8, 2025
1 parent 133a43c commit b21723d
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 9 deletions.
2 changes: 1 addition & 1 deletion src/algorithms/ctmrg/projectors.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ struct FixedSpaceTruncation <: TensorKit.TruncationScheme end
"""
ProjectorAlgorithm
Abstract super type for all CTMRG projector algorithms.
Abstract super type for all projector algorithms.
"""
abstract type ProjectorAlgorithm end

Expand Down
14 changes: 10 additions & 4 deletions src/algorithms/ctmrg/sequential.jl
Original file line number Diff line number Diff line change
Expand Up @@ -90,10 +90,10 @@ function sequential_projectors(
r′ = _prev(r, size(env, 2))
Q1 = TensorMap(EnlargedCorner(network, env, (SOUTHWEST, r, c)), SOUTHWEST)
Q2 = TensorMap(EnlargedCorner(network, env, (NORTHWEST, r′, c)), NORTHWEST)

Q1, Q2 = Q1 / norm(Q1), Q2 / norm(Q2)
alg = @set alg.svd_alg = svd_algorithm(alg, coordinate)

return compute_projector(Q1 / norm(Q1), Q2 / norm(Q2), alg)
return compute_projector(Q1, Q2, alg)
end
function sequential_projectors(
coordinate::NTuple{3,Int}, network, env::CTMRGEnv, alg::FullInfiniteProjector
Expand All @@ -102,15 +102,21 @@ function sequential_projectors(
coordinate_nw = _next_coordinate(coordinate, rowsize, colsize)
coordinate_ne = _next_coordinate(coordinate_nw, rowsize, colsize)
coordinate_se = _next_coordinate(coordinate_ne, rowsize, colsize)
ec = (
ec0 = (
TensorMap(EnlargedCorner(network, env, coordinate_se), SOUTHEAST),
TensorMap(EnlargedCorner(network, env, coordinate), SOUTHWEST),
TensorMap(EnlargedCorner(network, env, coordinate_nw), NORTHWEST),
TensorMap(EnlargedCorner(network, env, coordinate_ne), NORTHEAST),
)
ec[:] /= norm.(ec[:])
ec = (
ec0[1] / norm(ec0[1]),
ec0[2] / norm(ec0[2]),
ec0[3] / norm(ec0[3]),
ec0[4] / norm(ec0[4]),
)
alg = @set alg.svd_alg = svd_algorithm(alg, coordinate)
Q1, Q2 = ec[1] ec[2], ec[3] ec[4]

return compute_projector(Q1, Q2, alg)
end

Expand Down
14 changes: 10 additions & 4 deletions src/algorithms/ctmrg/simultaneous.jl
Original file line number Diff line number Diff line change
Expand Up @@ -76,8 +76,8 @@ function simultaneous_projectors(
coordinate, enlarged_corners::Array{E,3}, alg::HalfInfiniteProjector
) where {E}
coordinate′ = _next_coordinate(coordinate, size(enlarged_corners)[2:3]...)
ec = (enlarged_corners[coordinate...], enlarged_corners[coordinate′...])
ec[:] /= norm.(ec[:])
ec0 = (enlarged_corners[coordinate...], enlarged_corners[coordinate′...])
ec = (ec0[1] / norm(ec0[1]), ec0[2] / norm(ec0[2]))
alg = @set alg.svd_alg = svd_algorithm(alg, coordinate)

return compute_projector(ec[1], ec[2], alg)
Expand All @@ -89,15 +89,21 @@ function simultaneous_projectors(
coordinate2 = _next_coordinate(coordinate, rowsize, colsize)
coordinate3 = _next_coordinate(coordinate2, rowsize, colsize)
coordinate4 = _next_coordinate(coordinate3, rowsize, colsize)
ec = (
ec0 = (
enlarged_corners[coordinate4...],
enlarged_corners[coordinate...],
enlarged_corners[coordinate2...],
enlarged_corners[coordinate3...],
)
ec[:] /= norm.(ec[:])
ec = (
ec0[1] / norm(ec0[1]),
ec0[2] / norm(ec0[2]),
ec0[3] / norm(ec0[3]),
ec0[4] / norm(ec0[4]),
)
alg = @set alg.svd_alg = svd_algorithm(alg, coordinate)
Q1, Q2 = ec[1] ec[2], ec[3] ec[4]

return compute_projector(Q1, Q2, alg)
end

Expand Down

0 comments on commit b21723d

Please sign in to comment.