@@ -12,7 +12,9 @@ Contract four quadrants (enlarged corners) to form a full-infinite environment.
1212 |quadrant1| |quadrant2|
1313 |~~~~~~~~~| -- |~~~~~~~~~|
1414 | | | |
15+ out | |
1516 | |
17+ in | |
1618 | | | |
1719 |~~~~~~~~~| -- |~~~~~~~~~|
1820 |quadrant4| |quadrant3|
@@ -26,7 +28,9 @@ In the same manner two halfs can be used to contract the full-infinite environme
2628 | half1 |
2729 |~~~~~~~~~~~~~~~~~~~~~~~~|
2830 | | | |
31+ out | |
2932 | |
33+ in | |
3034 | | | |
3135 |~~~~~~~~~~~~~~~~~~~~~~~~|
3236 | half2 |
@@ -40,7 +44,9 @@ The environment can also be contracted directly from all its constituent tensors
4044 | | | |
4145 E_1 -- A_1 -- A_2 -- E_4
4246 | | | |
47+ out | |
4348 | |
49+ in | | |
4450 | | | |
4551 E_8 -- A_4 -- A_3 -- E_5
4652 | | | |
@@ -54,6 +60,7 @@ Alternatively, contract the environment with a vector `x` acting on it
5460 | | | |
5561 E_1 -- A_1 -- A_2 -- E_4
5662 | | | |
63+ out | |
5764 | |
5865 [~~~~x~~~] | |
5966 | | | |
@@ -112,25 +119,25 @@ function full_infinite_environment(
112119 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
113120 A_1:: P , A_2:: P , A_3:: P , A_4:: P ,
114121 ) where {P <: PEPSSandwich }
115- return @autoopt @tensor env[χ_in D_inabove D_inbelow; χ_out D_outabove D_outbelow ] :=
116- E_1[χ_in D1 D2; χ1] * C_1[χ1; χ2] * E_2[χ2 D3 D4; χ3] *
117- ket (A_1)[d1; D3 D11 D_inabove D1] * conj (bra (A_1)[d1; D4 D12 D_inbelow D2]) *
122+ return @autoopt @tensor env[χ_out D_outabove D_outbelow; χ_in D_inabove D_inbelow ] :=
123+ E_1[χ_out D1 D2; χ1] * C_1[χ1; χ2] * E_2[χ2 D3 D4; χ3] *
124+ ket (A_1)[d1; D3 D11 D_outabove D1] * conj (bra (A_1)[d1; D4 D12 D_outbelow D2]) *
118125 ket (A_2)[d2; D5 D7 D9 D11] * conj (bra (A_2)[d2; D6 D8 D10 D12]) *
119126 E_3[χ3 D5 D6; χ4] * C_2[χ4; χ5] * E_4[χ5 D7 D8; χ6] *
120127 E_5[χ6 D13 D14; χ7] * C_3[χ7; χ8] * E_6[χ8 D15 D16; χ9] *
121128 ket (A_3)[d3; D9 D13 D15 D17] * conj (bra (A_3)[d3; D10 D14 D16 D18]) *
122- ket (A_4)[d4; D_outabove D17 D19 D21] * conj (bra (A_4)[d4; D_outbelow D18 D20 D22]) *
123- E_7[χ9 D19 D20; χ10] * C_4[χ10; χ11] * E_8[χ11 D21 D22; χ_out ]
129+ ket (A_4)[d4; D_inabove D17 D19 D21] * conj (bra (A_4)[d4; D_inbelow D18 D20 D22]) *
130+ E_7[χ9 D19 D20; χ10] * C_4[χ10; χ11] * E_8[χ11 D21 D22; χ_in ]
124131end
125132function full_infinite_environment (
126133 C_1, C_2, C_3, C_4,
127134 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
128135 x:: AbstractTensor{T, S, 3} ,
129136 A_1:: P , A_2:: P , A_3:: P , A_4:: P ,
130137 ) where {T, S, P <: PEPSSandwich }
131- return @autoopt @tensor env_x[χ_in D_inabove D_inbelow ] :=
132- E_1[χ_in D1 D2; χ1] * C_1[χ1; χ2] * E_2[χ2 D3 D4; χ3] *
133- ket (A_1)[d1; D3 D11 D_inabove D1] * conj (bra (A_1)[d1; D4 D12 D_inbelow D2]) *
138+ return @autoopt @tensor env_x[χ_out D_outabove D_outbelow ] :=
139+ E_1[χ_out D1 D2; χ1] * C_1[χ1; χ2] * E_2[χ2 D3 D4; χ3] *
140+ ket (A_1)[d1; D3 D11 D_outabove D1] * conj (bra (A_1)[d1; D4 D12 D_outbelow D2]) *
134141 ket (A_2)[d2; D5 D7 D9 D11] * conj (bra (A_2)[d2; D6 D8 D10 D12]) *
135142 E_3[χ3 D5 D6; χ4] * C_2[χ4; χ5] * E_4[χ5 D7 D8; χ6] *
136143 E_5[χ6 D13 D14; χ7] * C_3[χ7; χ8] * E_6[χ8 D15 D16; χ9] *
@@ -161,25 +168,25 @@ function full_infinite_environment(
161168 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
162169 A_1:: P , A_2:: P , A_3:: P , A_4:: P ,
163170 ) where {P <: PFTensor }
164- return @autoopt @tensor env[χ_in D_in; χ_out D_out ] :=
165- E_1[χ_in D1; χ1] * C_1[χ1; χ2] * E_2[χ2 D3; χ3] *
166- A_1[D1 D_in ; D3 D11] *
171+ return @autoopt @tensor env[χ_out D_out; χ_in D_in ] :=
172+ E_1[χ_out D1; χ1] * C_1[χ1; χ2] * E_2[χ2 D3; χ3] *
173+ A_1[D1 D_out ; D3 D11] *
167174 A_2[D11 D9; D5 D7] *
168175 E_3[χ3 D5; χ4] * C_2[χ4; χ5] * E_4[χ5 D7; χ6] *
169176 E_5[χ6 D13; χ7] * C_3[χ7; χ8] * E_6[χ8 D15; χ9] *
170177 A_3[D17 D15; D9 D13] *
171- A_4[D21 D19; D_out D17] *
172- E_7[χ9 D19; χ10] * C_4[χ10; χ11] * E_8[χ11 D21; χ_out ]
178+ A_4[D21 D19; D_in D17] *
179+ E_7[χ9 D19; χ10] * C_4[χ10; χ11] * E_8[χ11 D21; χ_in ]
173180end
174181function full_infinite_environment (
175182 C_1, C_2, C_3, C_4,
176183 E_1, E_2, E_3, E_4, E_5, E_6, E_7, E_8,
177184 x:: AbstractTensor{T, S, 2} ,
178185 A_1:: P , A_2:: P , A_3:: P , A_4:: P ,
179186 ) where {T, S, P <: PFTensor }
180- return @autoopt @tensor env_x[χ_in D_in ] :=
181- E_1[χ_in D1; χ1] * C_1[χ1; χ2] * E_2[χ2 D3; χ3] *
182- A_1[D1 D_in ; D3 D11] *
187+ return @autoopt @tensor env_x[χ_out D_out ] :=
188+ E_1[χ_out D1; χ1] * C_1[χ1; χ2] * E_2[χ2 D3; χ3] *
189+ A_1[D1 D_out ; D3 D11] *
183190 A_2[D11 D9; D5 D7] *
184191 E_3[χ3 D5; χ4] * C_2[χ4; χ5] * E_4[χ5 D7; χ6] *
185192 E_5[χ6 D13; χ7] * C_3[χ7; χ8] * E_6[χ8 D15; χ9] *
0 commit comments