diff --git a/src/algorithms/ctmrg/c4v.jl b/src/algorithms/ctmrg/c4v.jl index a16d80f01..cc10c6216 100644 --- a/src/algorithms/ctmrg/c4v.jl +++ b/src/algorithms/ctmrg/c4v.jl @@ -120,8 +120,7 @@ function c4v_renormalize_edge(network, env::C4vCTMRGEnv, projector) # TODO: possible missing twists for fermions new_edge = renormalize_north_edge(env.edges[1], projector, projector', network[1, 1]) # additional Hermitian projection step for numerical stability - new_edge = _project_hermitian(new_edge) - return new_edge / norm(new_edge) + return normalize(_project_hermitian(new_edge)) end """ @@ -155,7 +154,7 @@ which reuses the renormalized edge `E′` (`new_edge`). (Credit: https://github.com/qiyang-ustc/QRCTM/blob/dd160116c3d7b02076691ceaf0a9833511ae532d/heisenberg.py#L80) """ function c4v_renormalize_corner(new_edge::CTMRGEdgeTensor, projector, info, ::C4vEighProjector) - return info.D / norm(info.D) + return normalize(info.D) end function c4v_renormalize_corner(new_edge::CTMRGEdgeTensor, projector, info, ::C4vQRProjector) # TODO: possible missing twists for fermions @@ -165,7 +164,7 @@ function c4v_renormalize_corner(new_edge::CTMRGEdgeTensor, projector, info, ::C4 # contract (edge′, R) with projector new_corner = contract_edges(ER, projector) new_corner = project_hermitian(new_corner) - return new_corner / norm(new_corner) + return normalize(new_corner) end """Contract two C4v CTMRG edge tensors into a corner tensor.""" diff --git a/src/algorithms/ctmrg/sequential.jl b/src/algorithms/ctmrg/sequential.jl index 3ce75c4c1..f71606cb2 100644 --- a/src/algorithms/ctmrg/sequential.jl +++ b/src/algorithms/ctmrg/sequential.jl @@ -141,13 +141,13 @@ function renormalize_sequentially(col::Int, projectors, network, env) # Apply projectors to renormalize corners and edge for row in axes(env.corners, 2) C_southwest = renormalize_southwest_corner((row, col), env, projectors) - corners[SOUTHWEST, row, col] = C_southwest / norm(C_southwest) + corners[SOUTHWEST, row, col] = normalize(C_southwest) C_northwest = renormalize_northwest_corner((row, col), env, projectors) - corners[NORTHWEST, row, col] = C_northwest / norm(C_northwest) + corners[NORTHWEST, row, col] = normalize(C_northwest) E_west = renormalize_west_edge((row, col), env, projectors, network) - edges[WEST, row, col] = E_west / norm(E_west) + edges[WEST, row, col] = normalize(E_west) end return CTMRGEnv(copy(corners), copy(edges)) diff --git a/src/algorithms/ctmrg/simultaneous.jl b/src/algorithms/ctmrg/simultaneous.jl index ecaf52c7b..4d4be9e89 100644 --- a/src/algorithms/ctmrg/simultaneous.jl +++ b/src/algorithms/ctmrg/simultaneous.jl @@ -150,7 +150,7 @@ function renormalize_simultaneously(enlarged_corners, projectors, network, env) ) edge = renormalize_west_edge((r, c), env, P_left, P_right, network) end - return corner / norm(corner), edge / norm(edge) + return normalize(corner), normalize(edge) end return CTMRGEnv(map(first, corners_edges), map(last, corners_edges)) diff --git a/src/environments/c4v_ctmrg_environments.jl b/src/environments/c4v_ctmrg_environments.jl index f914b73c0..0c3594b9e 100644 --- a/src/environments/c4v_ctmrg_environments.jl +++ b/src/environments/c4v_ctmrg_environments.jl @@ -66,7 +66,7 @@ function C4vCTMRGEnv( D, χ = only(Ds), only(chis) corner = _corner_tensor(f, T, χ, χ) edge = _edge_tensor(f, T, χ, D, χ) - return C4vCTMRGEnv(corner / norm(corner), edge / norm(edge)) + return C4vCTMRGEnv(normalize(corner), normalize(edge)) end function C4vCTMRGEnv(D::P, args...; kwargs...) where {P <: Union{Matrix{VectorSpace}, VectorSpace}} return C4vCTMRGEnv(randn, ComplexF64, D, args...; kwargs...)