Skip to content

Commit

Permalink
Update gaugefix test again
Browse files Browse the repository at this point in the history
  • Loading branch information
pbrehmer committed Dec 10, 2024
1 parent 663bf84 commit 45456f0
Showing 1 changed file with 27 additions and 59 deletions.
86 changes: 27 additions & 59 deletions test/ctmrg/gaugefix.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,78 +5,46 @@ using TensorKit

using PEPSKit: ctmrg_iteration, gauge_fix, calc_elementwise_convergence

spacetypes = [ComplexSpace, Z2Space]
scalartypes = [Float64, ComplexF64]
unitcells = [(1, 1), (2, 2), (3, 2)]
maxiter = 400
ctmrg_algs = [SequentialCTMRG, SimultaneousCTMRG]
projector_algs = [HalfInfiniteProjector, FullInfiniteProjector]
χ = 8
χ = 6
atol = 1e-4

function _make_symmetric!(psi)
if ==(size(psi)...)
return symmetrize!(psi, RotateReflect())
else
return symmetrize!(symmetrize!(psi, ReflectDepth()), ReflectWidth())
end
function _pre_converge_env(
::Type{T}, physical_space, peps_space, ctm_space, unitcell; seed=12345
) where {T}
Random.seed!(seed) # Seed RNG to make random environment consistent
psi = InfinitePEPS(rand, T, physical_space, peps_space; unitcell)
env₀ = CTMRGEnv(psi, ctm_space)
env_conv = leading_boundary(env₀, psi, SequentialCTMRG())
return env_conv, psi
end

# If I can't make the rng seed behave, I'll just randomly define a peps somehow
function _semi_random_peps!(psi::InfinitePEPS)
i = 0
A′ = map(psi.A) do a
for (_, b) in blocks(a)
l = length(b)
b .= reshape(collect((1:l) .+ i), size(b))
i += l
end
return a
# pre-converge CTMRG environments with given spacetype, scalartype and unit cell
preconv = Dict()
for (S, T, unitcell) in Iterators.product(spacetypes, scalartypes, unitcells)
if S == ComplexSpace
result = _pre_converge_env(T, S(2), S(2), S(χ), unitcell)
elseif S == Z2Space
result = _pre_converge_env(
T, S(0 => 1, 1 => 1), S(0 => 1, 1 => 1), S(0 => χ ÷ 2, 1 => χ ÷ 2), unitcell
)
end
return InfinitePEPS(A′)
end

@testset "Trivial symmetry ($T) - ($unitcell) - ($ctmrg_alg) - ($projector_alg)" for (
T, unitcell, ctmrg_alg, projector_alg
) in Iterators.product(
scalartypes, unitcells, ctmrg_algs, projector_algs
)
physical_space = ComplexSpace(2)
peps_space = ComplexSpace(2)
ctm_space = ComplexSpace(χ)

psi = InfinitePEPS(undef, T, physical_space, peps_space; unitcell)
_semi_random_peps!(psi)
_make_symmetric!(psi)

Random.seed!(987654321) # Seed RNG to make random environment consistent
env = CTMRGEnv(psi, ctm_space)
alg = ctmrg_alg(; maxiter, projector_alg)

env = leading_boundary(env, psi, alg)
env′, = ctmrg_iteration(psi, env, alg)
env_fixed, = gauge_fix(env, env′)
@test calc_elementwise_convergence(env, env_fixed) 0 atol = atol
push!(preconv, (S, T, unitcell) => result)
end

@testset "Z2 symmetry ($T) - ($unitcell) - ($ctmrg_alg) - ($projector_alg)" for (
T, unitcell, ctmrg_alg, projector_alg
@testset "($S) - ($T) - ($unitcell) - ($ctmrg_alg) - ($projector_alg)" for (
S, T, unitcell, ctmrg_alg, projector_alg
) in Iterators.product(
scalartypes, unitcells, ctmrg_algs, projector_algs
spacetypes, scalartypes, unitcells, ctmrg_algs, projector_algs
)
physical_space = Z2Space(0 => 1, 1 => 1)
peps_space = Z2Space(0 => 1, 1 => 1)
ctm_space = Z2Space(0 => χ ÷ 2, 1 => χ ÷ 2)

psi = InfinitePEPS(undef, T, physical_space, peps_space; unitcell)
_semi_random_peps!(psi)
_make_symmetric!(psi)

Random.seed!(29385293852) # Seed RNG to make random environment consistent
psi = InfinitePEPS(physical_space, peps_space; unitcell)
env = CTMRGEnv(psi, ctm_space)
alg = ctmrg_alg(; maxiter, projector_alg)

env = leading_boundary(env, psi, alg)
alg = ctmrg_alg(; projector_alg)
env_pre, psi = preconv[(S, T, unitcell)]
env_pre
env = leading_boundary(env_pre, psi, alg)
env′, = ctmrg_iteration(psi, env, alg)
env_fixed, = gauge_fix(env, env′)
@test calc_elementwise_convergence(env, env_fixed) 0 atol = atol
Expand Down

0 comments on commit 45456f0

Please sign in to comment.