Skip to content

Commit 602b398

Browse files
committed
fix more edge cases
1 parent fa7a450 commit 602b398

File tree

1 file changed

+17
-7
lines changed

1 file changed

+17
-7
lines changed

src/operators/ortho.jl

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

@@ -101,7 +106,7 @@ end
101106

102107
function 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

Comments
 (0)