Skip to content

Commit 7de7979

Browse files
Make physicalspace etc periodic for infinite networks (#290)
1 parent fa943d8 commit 7de7979

4 files changed

Lines changed: 28 additions & 7 deletions

File tree

src/networks/infinitesquarenetwork.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ end
5555

5656
## Spaces
5757

58-
virtualspace(n::InfiniteSquareNetwork, r::Int, c::Int, dir) = virtualspace(n[r, c], dir)
58+
function virtualspace(n::InfiniteSquareNetwork, r::Int, c::Int, dir)
59+
Nr, Nc = size(n)
60+
return virtualspace(n[mod1(r, Nr), mod1(c, Nc)], dir)
61+
end
5962

6063
## Vector interface
6164

src/operators/infinitepepo.jl

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,18 @@ end
147147
## Spaces
148148

149149
TensorKit.spacetype(::Type{P}) where {P <: InfinitePEPO} = spacetype(eltype(P))
150-
virtualspace(T::InfinitePEPO, r::Int, c::Int, h::Int, dir) = virtualspace(T[r, c, h], dir)
151-
domain_physicalspace(T::InfinitePEPO, r::Int, c::Int) = domain_physicalspace(T[r, c, 1])
152-
codomain_physicalspace(T::InfinitePEPO, r::Int, c::Int) = codomain_physicalspace(T[r, c, end])
150+
function virtualspace(T::InfinitePEPO, r::Int, c::Int, h::Int, dir)
151+
Nr, Nc, Nh = size(T)
152+
return virtualspace(T[mod1(r, Nr), mod1(c, Nc), mod1(h, Nh)], dir)
153+
end
154+
function domain_physicalspace(T::InfinitePEPO, r::Int, c::Int)
155+
Nr, Nc, = size(T)
156+
return domain_physicalspace(T[mod1(r, Nr), mod1(c, Nc), 1])
157+
end
158+
function codomain_physicalspace(T::InfinitePEPO, r::Int, c::Int)
159+
Nr, Nc, = size(T)
160+
return codomain_physicalspace(T[mod1(r, Nr), mod1(c, Nc), end])
161+
end
153162
physicalspace(T::InfinitePEPO) = [physicalspace(T, row, col) for row in axes(T, 1), col in axes(T, 2)]
154163
function physicalspace(T::InfinitePEPO, r::Int, c::Int)
155164
codomain_physicalspace(T, r, c) == domain_physicalspace(T, r, c) || throw(

src/states/infinitepartitionfunction.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,10 @@ end
139139
## Spaces
140140

141141
TensorKit.spacetype(::Type{T}) where {T <: InfinitePartitionFunction} = spacetype(eltype(T))
142-
virtualspace(n::InfinitePartitionFunction, r::Int, c::Int, dir) = virtualspace(n[r, c], dir)
142+
function virtualspace(n::InfinitePartitionFunction, r::Int, c::Int, dir)
143+
Nr, Nc = size(n)
144+
return virtualspace(n[mod1(r, Nr), mod1(c, Nc)], dir)
145+
end
143146

144147
## InfiniteSquareNetwork interface
145148

src/states/infinitepeps.jl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,15 @@ end
143143

144144
TensorKit.spacetype(::Type{T}) where {T <: InfinitePEPS} = spacetype(eltype(T))
145145
virtualspace(n::InfinitePEPS, dir) = virtualspace.(unitcell(n), dir)
146-
virtualspace(n::InfinitePEPS, r::Int, c::Int, dir) = virtualspace(n[r, c], dir)
146+
function virtualspace(n::InfinitePEPS, r::Int, c::Int, dir)
147+
Nr, Nc = size(n)
148+
return virtualspace(n[mod1(r, Nr), mod1(c, Nc)], dir)
149+
end
147150
physicalspace(n::InfinitePEPS) = physicalspace.(unitcell(n))
148-
physicalspace(n::InfinitePEPS, r::Int, c::Int) = physicalspace(n[r, c])
151+
function physicalspace(n::InfinitePEPS, r::Int, c::Int)
152+
Nr, Nc = size(n)
153+
return physicalspace(n[mod1(r, Nr), mod1(c, Nc)])
154+
end
149155

150156
## InfiniteSquareNetwork interface
151157

0 commit comments

Comments
 (0)