Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ LoggingExtras = "1"
MPSKit = "0.12"
MPSKitModels = "0.4"
OhMyThreads = "0.7"
OptimKit = "0.3"
OptimKit = "0.3, 0.4"
Printf = "1"
QuadGK = "2.11.1"
Random = "1"
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ chi = 20
ctm_alg = SimultaneousCTMRG(; tol=1e-10, trscheme=truncdim(chi))
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg,
optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=2),
optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=3),
gradient_alg=LinSolver(),
reuse_env=true,
)
Expand Down
2 changes: 1 addition & 1 deletion docs/src/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ chi = 20
ctm_alg = SimultaneousCTMRG(; tol=1e-10, trscheme=truncdim(chi))
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg,
optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=2),
optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=3),
gradient_alg=LinSolver(),
reuse_env=true,
)
Expand Down
2 changes: 1 addition & 1 deletion examples/heisenberg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ H = heisenberg_XYZ(InfiniteSquare(); Jx=-1, Jy=1, Jz=-1)
ctm_alg = SimultaneousCTMRG(; tol=1e-10, verbosity=2)
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg,
optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=2),
optimizer=LBFGS(4; maxiter=100, gradtol=1e-4, verbosity=3),
gradient_alg=LinSolver(; solver=GMRES(; tol=1e-6, maxiter=100)),
reuse_env=true,
)
Expand Down
4 changes: 2 additions & 2 deletions src/PEPSKit.jl
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ include("utility/symmetrization.jl")
const ctmrg_alg = SimultaneousCTMRG(
ctmrg_tol, ctmrg_maxiter, ctmrg_miniter, 2, projector_alg
)
const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=2)
const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=3)
const gradient_linsolver = KrylovKit.BiCGStab(;
maxiter=Defaults.fpgrad_maxiter, tol=Defaults.fpgrad_tol
)
Expand Down Expand Up @@ -130,7 +130,7 @@ module Defaults
const ctmrg_alg = SimultaneousCTMRG(
ctmrg_tol, ctmrg_maxiter, ctmrg_miniter, 2, projector_alg
)
const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=2)
const optimizer = LBFGS(32; maxiter=100, gradtol=1e-4, verbosity=3)
const gradient_linsolver = KrylovKit.BiCGStab(;
maxiter=Defaults.fpgrad_maxiter, tol=Defaults.fpgrad_tol
)
Expand Down
2 changes: 1 addition & 1 deletion test/heisenberg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ Dbond = 2
χenv = 16
ctm_alg = SimultaneousCTMRG()
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg, optimizer=LBFGS(4; gradtol=1e-3, verbosity=2)
boundary_alg=ctm_alg, optimizer=LBFGS(4; gradtol=1e-3, verbosity=3)
)
# compare against Juraj Hasik's data:
# https://github.com/jurajHasik/j1j2_ipeps_states/blob/main/single-site_pg-C4v-A1/j20.0/state_1s_A1_j20.0_D2_chi_opt48.dat
Expand Down
2 changes: 1 addition & 1 deletion test/j1j2_model.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ using OptimKit
ctm_alg = SimultaneousCTMRG()
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg,
optimizer=LBFGS(4; gradtol=1e-3, verbosity=2),
optimizer=LBFGS(4; gradtol=1e-3, verbosity=3),
gradient_alg=LinSolver(; iterscheme=:diffgauge),
)

Expand Down
2 changes: 1 addition & 1 deletion test/pwave.jl
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ H = pwave_superconductor(InfiniteSquare(unitcell...))
χenv = 16
ctm_alg = SimultaneousCTMRG(; maxiter=150)
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg, optimizer=LBFGS(4; maxiter=10, gradtol=1e-3, verbosity=2)
boundary_alg=ctm_alg, optimizer=LBFGS(4; maxiter=10, gradtol=1e-3, verbosity=3)
)

# initialize states
Expand Down
126 changes: 126 additions & 0 deletions test/sandbox.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
using Test
using Random
using TensorKit
using KrylovKit
using LineSearches, Manifolds, Manopt
using PEPSKit

##
using KrylovKit
using TensorKit
using PEPSKit

Dbond = 2
χenv = 16
svd_alg = SVDAdjoint(; fwd_alg=IterSVD(; alg=GKL(; tol=1e-10)))
ctmrg_alg = SimultaneousCTMRG(; svd_alg)
ψ = InfinitePEPS(2, Dbond)
env = leading_boundary(CTMRGEnv(ψ, ℂ^χenv), ψ, ctmrg_alg);

##
# initialize parameters
Dbond = 2
χenv = 16
# ctm_alg = SequentialCTMRG()
# opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, tol=1e-3, gradient_alg=LinSolver(; solver=GMRES(; tol=1e-4), iterscheme=:diffgauge))
ctm_alg = SimultaneousCTMRG()
opt_alg = PEPSOptimize(; boundary_alg=ctm_alg, tol=1e-3)
# compare against Juraj Hasik's data:
# https://github.com/jurajHasik/j1j2_ipeps_states/blob/main/single-site_pg-C4v-A1/j20.0/state_1s_A1_j20.0_D2_chi_opt48.dat
E_ref = -0.6602310934799577

# initialize states
Random.seed!(123)
H = heisenberg_XYZ(InfiniteSquare())
psi_init = InfinitePEPS(2, Dbond)
env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg)

# optimize energy and compute correlation lengths
peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init);
ξ_h, ξ_v, = correlation_length(peps, env)

@test E ≈ E_ref atol = 1e-2
@test all(@. ξ_h > 0 && ξ_v > 0)

##
g = 3.1
e = -1.6417 * 2
mˣ = 0.91

# initialize parameters
χbond = 2
χenv = 16
ctm_alg = SimultaneousCTMRG()
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg,
tol=1e-3,
# stepsize=WolfePowellBinaryLinesearch(),
# stepsize=Manopt.LineSearchesStepsize(LineSearches.HagerZhang(; alphamax=1.0)),
# stepsize=ConstantLength(1.0),
# stepsize=WolfePowellLinesearch(),
# stepsize=WolfePowellLinesearch(; sufficient_decrease=0.1, sufficient_curvature=0.9),
# direction_update=InverseBroyden(1.0),
# cautious_update=true,
)

# initialize states
H = transverse_field_ising(InfiniteSquare(); g)
H_polar = transverse_field_ising(InfiniteSquare(); g=4.5)
Random.seed!(91283219347)
psi_init = InfinitePEPS(2, χbond)
env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg)

# find fixedpoint
peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init);
# peps_polar, env_polar, E_polar, = fixedpoint(psi_init, H_polar, opt_alg, env_init);

##
χbond = 2
χenv = 12
ctm_alg = SimultaneousCTMRG()
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg,
tol=1e-3,
gradient_alg=LinSolver(; iterscheme=:diffgauge),
symmetrization=RotateReflect(),
)

# initialize states
Random.seed!(91283219347)
H = j1_j2(InfiniteSquare(); J2=0.25)
psi_init = product_peps(2, χbond; noise_amp=1e-1)
psi_init = symmetrize!(psi_init, RotateReflect())
env_init, = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg);

# find fixedpoint
result = fixedpoint(psi_init, H, opt_alg, env_init)

##
unitcell = (2, 2)
H = pwave_superconductor(InfiniteSquare(unitcell...))
Dbond = 2
χenv = 16
ctm_alg = SimultaneousCTMRG()
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg,
maxiter=10,
gradient_alg=LinSolver(; iterscheme=:diffgauge),
# stepsize=WolfePowellLinesearch(),
stepsize=ConstantLength(1.5),
memory_size=4,
)

# initialize states
Pspace = Vect[FermionParity](0 => 1, 1 => 1)
Vspace = Vect[FermionParity](0 => Dbond ÷ 2, 1 => Dbond ÷ 2)
Envspace = Vect[FermionParity](0 => χenv ÷ 2, 1 => χenv ÷ 2)
Random.seed!(91283219347)
psi_init = InfinitePEPS(Pspace, Vspace, Vspace; unitcell)
env_init, = leading_boundary(CTMRGEnv(psi_init, Envspace), psi_init, ctm_alg);

# find fixedpoint
peps, env, E, = fixedpoint(psi_init, H, opt_alg, env_init);
@show E / 4

# comparison with Gaussian PEPS minimum at D=2 on 1000x1000 square lattice with aPBC
@test E / prod(size(psi_init)) ≈ -2.6241 atol = 5e-2
4 changes: 2 additions & 2 deletions test/tf_ising.jl
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,12 @@ mˣ = 0.91
χenv = 16
ctm_alg = SimultaneousCTMRG()
opt_alg = PEPSOptimize(;
boundary_alg=ctm_alg, optimizer=LBFGS(4; gradtol=1e-3, verbosity=2)
boundary_alg=ctm_alg, optimizer=LBFGS(4; gradtol=1e-3, verbosity=3)
)

# initialize states
H = transverse_field_ising(InfiniteSquare(); g)
Random.seed!(91283219347)
Random.seed!(2928528935)
psi_init = InfinitePEPS(2, χbond)
env_init = leading_boundary(CTMRGEnv(psi_init, ComplexSpace(χenv)), psi_init, ctm_alg)

Expand Down