@@ -88,10 +88,15 @@ function left_canonicalize!(
8888
8989 # absorb into next site
9090 W′ = H[i + 1 ]
91- @plansor A′[l p; p' r] := R[l; r' ] * W′. A[r' p; p' r]
91+ if i != length (H) - 1
92+ @plansor A′[l p; p' r] := R[l; r' ] * W′. A[r' p; p' r]
93+ @plansor C′[l p; p' r] := t[l; r' ] * W′. A[r' p; p' r]
94+ C′ = add! (removeunit (C′, 1 ), W′. C)
95+ else
96+ A′ = similar (W′. A, space (R, 1 ) ⊗ physicalspace (W′) ← domain (W′. A))
97+ C′ = W′. C
98+ end
9299 @plansor B′[l p; p' ] := R[l; r] * W′. B[r p; p' ]
93- @plansor C′[l p; p' r] := t[l; r' ] * W′. A[r' p; p' r]
94- C′ = add! (removeunit (C′, 1 ), W′. C)
95100 @plansor D′[l p; p' ] := t[l; r] * W′. B[r p; p' ]
96101 D′ = add! (removeunit (D′, 1 ), W′. D)
97102
101106
102107function right_canonicalize! (
103108 H:: MPOHamiltonian , i:: Int ;
104- alg = RQpos (), trscheme:: TruncationScheme = notrunc ()
109+ alg = LQpos (), trscheme:: TruncationScheme = notrunc ()
105110 )
106111 if H isa FiniteMPOHamiltonian
107112 1 < i ≤ length (H) || throw (ArgumentError (" Bounds error in canonicalize" ))
@@ -156,9 +161,14 @@ function right_canonicalize!(
156161
157162 # absorb into previous site
158163 W′ = H[i - 1 ]
159- @plansor A′[l p; p' r] := W′. A[l p; p' r' ] * R[r' ; r]
160- @plansor B′[l p; p' r] := W′. A[l p; p' r' ] * t[r' ; r]
161- B′ = add! (removeunit (B′, 4 ), W′. B)
164+ if i != 2
165+ @plansor A′[l p; p' r] := W′. A[l p; p' r' ] * R[r' ; r]
166+ @plansor B′[l p; p' r] := W′. A[l p; p' r' ] * t[r' ; r]
167+ B′ = add! (removeunit (B′, 4 ), W′. B)
168+ else
169+ A′ = similar (W′. A, codomain (W′. A) ← physicalspace (W′. A) ⊗ space (R, 2 )' )
170+ B′ = W′. B
171+ end
162172 @plansor C′[p; p' r] := W′. C[p; p' r' ] * R[r' ; r]
163173 @plansor D′[p; p' r] := W′. C[p; p' r' ] * t[r' ; r]
164174 D′ = add! (removeunit (D′, 3 ), W′. D)
0 commit comments