1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: RelMRCI_tasks14.cc
4 // Copyright (C) 2014 Toru Shiozaki
5 //
6 // Author: Toru Shiozaki <shiozaki@northwestern.edu>
7 // Maintainer: Shiozaki group
8 //
9 // This file is part of the BAGEL package.
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program. If not, see <http://www.gnu.org/licenses/>.
23 //
24
25 #include <bagel_config.h>
26 #ifdef COMPILE_SMITH
27
28 #include <src/smith/relmrci/RelMRCI_tasks14.h>
29
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::RelMRCI;
34
compute()35 void Task650::Task_local::compute() {
36 const Index c2 = b(0);
37 const Index a3 = b(1);
38 const Index x0 = b(2);
39 const Index a1 = b(3);
40 // tensor label: I134
41 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
42 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
43 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
44 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
45 for (auto& x3 : *range_[1]) {
46 for (auto& a4 : *range_[2]) {
47 // tensor label: t2
48 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a4, c2, a1);
49 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a4, c2, a1)]);
50 sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), a4.size(), c2.size(), a1.size());
51 // tensor label: I1109
52 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, a3, x3, x0);
53 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, a3, x3, x0)]);
54 sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, a4.size(), a3.size(), x3.size(), x0.size());
55 zgemm3m_("T", "N", c2.size()*a1.size(), a3.size()*x0.size(), a4.size()*x3.size(),
56 1.0, i0data_sorted, a4.size()*x3.size(), i1data_sorted, a4.size()*x3.size(),
57 1.0, odata_sorted, c2.size()*a1.size());
58 }
59 }
60 sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, c2.size(), a1.size(), a3.size(), x0.size());
61 out()->add_block(odata, c2, a3, x0, a1);
62 }
63
compute()64 void Task651::Task_local::compute() {
65 const Index a4 = b(0);
66 const Index a3 = b(1);
67 const Index x3 = b(2);
68 const Index x0 = b(3);
69 // tensor label: I1109
70 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
71 std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
72 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
73 std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
74 for (auto& x2 : *range_[1]) {
75 for (auto& x1 : *range_[1]) {
76 // tensor label: Gamma33
77 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
78 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
79 sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
80 // tensor label: I1110
81 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, a3, x2, x1);
82 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, a3, x2, x1)]);
83 sort_indices<2,3,0,1,0,1,1,1>(i1data, i1data_sorted, a4.size(), a3.size(), x2.size(), x1.size());
84 zgemm3m_("T", "N", x3.size()*x0.size(), a4.size()*a3.size(), x2.size()*x1.size(),
85 1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
86 1.0, odata_sorted, x3.size()*x0.size());
87 }
88 }
89 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a4.size(), a3.size());
90 out()->add_block(odata, a4, a3, x3, x0);
91 }
92
compute()93 void Task652::Task_local::compute() {
94 const Index a4 = b(0);
95 const Index a3 = b(1);
96 const Index x2 = b(2);
97 const Index x1 = b(3);
98 // tensor label: I1110
99 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x2, x1)]);
100 std::fill_n(odata.get(), out()->get_size(a4, a3, x2, x1), 0.0);
101 {
102 // tensor label: v2
103 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a4, a3, x2, x1);
104 sort_indices<0,1,2,3,1,1,-1,2>(i0data, odata, a4.size(), a3.size(), x2.size(), x1.size());
105 }
106 {
107 // tensor label: v2
108 std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x2, x1, a4, a3);
109 sort_indices<2,3,0,1,1,1,-1,2>(i1data, odata, x2.size(), x1.size(), a4.size(), a3.size());
110 }
111 out()->add_block(odata, a4, a3, x2, x1);
112 }
113
compute()114 void Task653::Task_local::compute() {
115 const Index a4 = b(0);
116 const Index a3 = b(1);
117 const Index x3 = b(2);
118 const Index x0 = b(3);
119 // tensor label: I1109
120 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
121 std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
122 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
123 std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
124 for (auto& x2 : *range_[1]) {
125 for (auto& x1 : *range_[1]) {
126 // tensor label: Gamma24
127 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x2, x1, x0);
128 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x2, x1, x0)]);
129 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x2.size(), x1.size(), x0.size());
130 // tensor label: v2
131 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, x2, x1, a3);
132 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, x2, x1, a3)]);
133 sort_indices<1,2,0,3,0,1,-1,2>(i1data, i1data_sorted, a4.size(), x2.size(), x1.size(), a3.size());
134 zgemm3m_("T", "N", x3.size()*x0.size(), a4.size()*a3.size(), x2.size()*x1.size(),
135 1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
136 1.0, odata_sorted, x3.size()*x0.size());
137 }
138 }
139 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a4.size(), a3.size());
140 out()->add_block(odata, a4, a3, x3, x0);
141 }
142
compute()143 void Task654::Task_local::compute() {
144 const Index a4 = b(0);
145 const Index a3 = b(1);
146 const Index x3 = b(2);
147 const Index x0 = b(3);
148 // tensor label: I1109
149 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
150 std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
151 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
152 std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
153 for (auto& x1 : *range_[1]) {
154 for (auto& x2 : *range_[1]) {
155 // tensor label: Gamma368
156 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x1, x2, x0);
157 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x1, x2, x0)]);
158 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x1.size(), x2.size(), x0.size());
159 // tensor label: v2
160 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, a3, a4, x1);
161 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, a3, a4, x1)]);
162 sort_indices<3,0,1,2,0,1,1,2>(i1data, i1data_sorted, x2.size(), a3.size(), a4.size(), x1.size());
163 zgemm3m_("T", "N", x3.size()*x0.size(), a3.size()*a4.size(), x2.size()*x1.size(),
164 1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
165 1.0, odata_sorted, x3.size()*x0.size());
166 }
167 }
168 sort_indices<3,2,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a3.size(), a4.size());
169 out()->add_block(odata, a4, a3, x3, x0);
170 }
171
compute()172 void Task655::Task_local::compute() {
173 const Index c2 = b(0);
174 const Index a3 = b(1);
175 const Index x0 = b(2);
176 const Index a1 = b(3);
177 // tensor label: I134
178 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
179 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
180 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
181 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
182 for (auto& x3 : *range_[1]) {
183 for (auto& a4 : *range_[2]) {
184 // tensor label: t2
185 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, c2, a4);
186 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, c2, a4)]);
187 sort_indices<0,3,1,2,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), c2.size(), a4.size());
188 // tensor label: I1112
189 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, a3, x3, x0);
190 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, a3, x3, x0)]);
191 sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, a4.size(), a3.size(), x3.size(), x0.size());
192 zgemm3m_("T", "N", a1.size()*c2.size(), a3.size()*x0.size(), a4.size()*x3.size(),
193 1.0, i0data_sorted, a4.size()*x3.size(), i1data_sorted, a4.size()*x3.size(),
194 1.0, odata_sorted, a1.size()*c2.size());
195 }
196 }
197 sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, a1.size(), c2.size(), a3.size(), x0.size());
198 out()->add_block(odata, c2, a3, x0, a1);
199 }
200
compute()201 void Task656::Task_local::compute() {
202 const Index a4 = b(0);
203 const Index a3 = b(1);
204 const Index x3 = b(2);
205 const Index x0 = b(3);
206 // tensor label: I1112
207 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
208 std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
209 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
210 std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
211 for (auto& x2 : *range_[1]) {
212 for (auto& x1 : *range_[1]) {
213 // tensor label: Gamma33
214 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
215 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
216 sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
217 // tensor label: I1113
218 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, a3, x2, x1);
219 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, a3, x2, x1)]);
220 sort_indices<2,3,0,1,0,1,1,1>(i1data, i1data_sorted, a4.size(), a3.size(), x2.size(), x1.size());
221 zgemm3m_("T", "N", x3.size()*x0.size(), a4.size()*a3.size(), x2.size()*x1.size(),
222 1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
223 1.0, odata_sorted, x3.size()*x0.size());
224 }
225 }
226 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a4.size(), a3.size());
227 out()->add_block(odata, a4, a3, x3, x0);
228 }
229
compute()230 void Task657::Task_local::compute() {
231 const Index a4 = b(0);
232 const Index a3 = b(1);
233 const Index x2 = b(2);
234 const Index x1 = b(3);
235 // tensor label: I1113
236 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x2, x1)]);
237 std::fill_n(odata.get(), out()->get_size(a4, a3, x2, x1), 0.0);
238 {
239 // tensor label: v2
240 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a4, a3, x2, x1);
241 sort_indices<0,1,2,3,1,1,1,2>(i0data, odata, a4.size(), a3.size(), x2.size(), x1.size());
242 }
243 {
244 // tensor label: v2
245 std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x2, x1, a4, a3);
246 sort_indices<2,3,0,1,1,1,1,2>(i1data, odata, x2.size(), x1.size(), a4.size(), a3.size());
247 }
248 out()->add_block(odata, a4, a3, x2, x1);
249 }
250
compute()251 void Task658::Task_local::compute() {
252 const Index a4 = b(0);
253 const Index a3 = b(1);
254 const Index x3 = b(2);
255 const Index x0 = b(3);
256 // tensor label: I1112
257 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
258 std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
259 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
260 std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
261 for (auto& x1 : *range_[1]) {
262 for (auto& x2 : *range_[1]) {
263 // tensor label: Gamma363
264 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x1, x2);
265 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x1, x2)]);
266 sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x1.size(), x2.size());
267 // tensor label: v2
268 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a4, x2, x1, a3);
269 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a4, x2, x1, a3)]);
270 sort_indices<2,1,0,3,0,1,1,2>(i1data, i1data_sorted, a4.size(), x2.size(), x1.size(), a3.size());
271 zgemm3m_("T", "N", x3.size()*x0.size(), a4.size()*a3.size(), x2.size()*x1.size(),
272 1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
273 1.0, odata_sorted, x3.size()*x0.size());
274 }
275 }
276 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), x0.size(), a4.size(), a3.size());
277 out()->add_block(odata, a4, a3, x3, x0);
278 }
279
compute()280 void Task659::Task_local::compute() {
281 const Index a4 = b(0);
282 const Index a3 = b(1);
283 const Index x3 = b(2);
284 const Index x0 = b(3);
285 // tensor label: I1112
286 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
287 std::fill_n(odata.get(), out()->get_size(a4, a3, x3, x0), 0.0);
288 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a4, a3, x3, x0)]);
289 std::fill_n(odata_sorted.get(), out()->get_size(a4, a3, x3, x0), 0.0);
290 for (auto& x2 : *range_[1]) {
291 for (auto& x1 : *range_[1]) {
292 // tensor label: v2
293 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x2, a3, a4, x1);
294 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x2, a3, a4, x1)]);
295 sort_indices<0,3,1,2,0,1,1,1>(i0data, i0data_sorted, x2.size(), a3.size(), a4.size(), x1.size());
296 // tensor label: Gamma33
297 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, x0, x2, x1);
298 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, x0, x2, x1)]);
299 sort_indices<2,3,0,1,0,1,-1,2>(i1data, i1data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
300 zgemm3m_("T", "N", a3.size()*a4.size(), x3.size()*x0.size(), x2.size()*x1.size(),
301 1.0, i0data_sorted, x2.size()*x1.size(), i1data_sorted, x2.size()*x1.size(),
302 1.0, odata_sorted, a3.size()*a4.size());
303 }
304 }
305 sort_indices<1,0,2,3,1,1,1,1>(odata_sorted, odata, a3.size(), a4.size(), x3.size(), x0.size());
306 out()->add_block(odata, a4, a3, x3, x0);
307 }
308
compute()309 void Task660::Task_local::compute() {
310 const Index c2 = b(0);
311 const Index a3 = b(1);
312 const Index x0 = b(2);
313 const Index a1 = b(3);
314 // tensor label: I134
315 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
316 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
317 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
318 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
319 for (auto& x5 : *range_[1]) {
320 for (auto& x4 : *range_[1]) {
321 // tensor label: t2
322 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, a1, x4, a3);
323 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, a1, x4, a3)]);
324 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), a1.size(), x4.size(), a3.size());
325 // tensor label: I1199
326 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(c2, x5, x0, x4);
327 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(c2, x5, x0, x4)]);
328 sort_indices<1,3,0,2,0,1,1,1>(i1data, i1data_sorted, c2.size(), x5.size(), x0.size(), x4.size());
329 zgemm3m_("T", "N", a1.size()*a3.size(), c2.size()*x0.size(), x5.size()*x4.size(),
330 1.0, i0data_sorted, x5.size()*x4.size(), i1data_sorted, x5.size()*x4.size(),
331 1.0, odata_sorted, a1.size()*a3.size());
332 }
333 }
334 sort_indices<2,1,3,0,1,1,1,1>(odata_sorted, odata, a1.size(), a3.size(), c2.size(), x0.size());
335 out()->add_block(odata, c2, a3, x0, a1);
336 }
337
compute()338 void Task661::Task_local::compute() {
339 const Index c2 = b(0);
340 const Index x5 = b(1);
341 const Index x0 = b(2);
342 const Index x4 = b(3);
343 // tensor label: I1199
344 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, x5, x0, x4)]);
345 std::fill_n(odata.get(), out()->get_size(c2, x5, x0, x4), 0.0);
346 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, x5, x0, x4)]);
347 std::fill_n(odata_sorted.get(), out()->get_size(c2, x5, x0, x4), 0.0);
348 for (auto& x3 : *range_[1]) {
349 for (auto& x2 : *range_[1]) {
350 for (auto& x1 : *range_[1]) {
351 // tensor label: Gamma32
352 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x3, x2, x1);
353 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x3, x2, x1)]);
354 sort_indices<3,4,5,0,1,2,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
355 // tensor label: v2
356 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(c2, x3, x2, x1);
357 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(c2, x3, x2, x1)]);
358 sort_indices<1,2,3,0,0,1,-1,1>(i1data, i1data_sorted, c2.size(), x3.size(), x2.size(), x1.size());
359 zgemm3m_("T", "N", x5.size()*x0.size()*x4.size(), c2.size(), x3.size()*x2.size()*x1.size(),
360 1.0, i0data_sorted, x3.size()*x2.size()*x1.size(), i1data_sorted, x3.size()*x2.size()*x1.size(),
361 1.0, odata_sorted, x5.size()*x0.size()*x4.size());
362 }
363 }
364 }
365 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x0.size(), x4.size(), c2.size());
366 out()->add_block(odata, c2, x5, x0, x4);
367 }
368
compute()369 void Task662::Task_local::compute() {
370 const Index c2 = b(0);
371 const Index x5 = b(1);
372 const Index x0 = b(2);
373 const Index x4 = b(3);
374 // tensor label: I1199
375 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, x5, x0, x4)]);
376 std::fill_n(odata.get(), out()->get_size(c2, x5, x0, x4), 0.0);
377 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, x5, x0, x4)]);
378 std::fill_n(odata_sorted.get(), out()->get_size(c2, x5, x0, x4), 0.0);
379 for (auto& x1 : *range_[1]) {
380 for (auto& x3 : *range_[1]) {
381 for (auto& x2 : *range_[1]) {
382 // tensor label: Gamma391
383 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x1, x3, x2);
384 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x1, x3, x2)]);
385 sort_indices<3,4,5,0,1,2,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x1.size(), x3.size(), x2.size());
386 // tensor label: v2
387 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, x2, c2, x1);
388 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, x2, c2, x1)]);
389 sort_indices<3,0,1,2,0,1,-1,1>(i1data, i1data_sorted, x3.size(), x2.size(), c2.size(), x1.size());
390 zgemm3m_("T", "N", x5.size()*x0.size()*x4.size(), c2.size(), x3.size()*x2.size()*x1.size(),
391 1.0, i0data_sorted, x3.size()*x2.size()*x1.size(), i1data_sorted, x3.size()*x2.size()*x1.size(),
392 1.0, odata_sorted, x5.size()*x0.size()*x4.size());
393 }
394 }
395 }
396 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x0.size(), x4.size(), c2.size());
397 out()->add_block(odata, c2, x5, x0, x4);
398 }
399
compute()400 void Task663::Task_local::compute() {
401 const Index c2 = b(0);
402 const Index a3 = b(1);
403 const Index x0 = b(2);
404 const Index a1 = b(3);
405 // tensor label: I134
406 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
407 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
408 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
409 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
410 for (auto& a4 : *range_[2]) {
411 for (auto& x1 : *range_[1]) {
412 // tensor label: v2
413 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a4, x1, c2, a1);
414 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(a4, x1, c2, a1)]);
415 sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, a4.size(), x1.size(), c2.size(), a1.size());
416 // tensor label: I1205
417 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, a4, x0, x1);
418 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, a4, x0, x1)]);
419 sort_indices<1,3,0,2,0,1,1,1>(i1data, i1data_sorted, a3.size(), a4.size(), x0.size(), x1.size());
420 zgemm3m_("T", "N", c2.size()*a1.size(), a3.size()*x0.size(), a4.size()*x1.size(),
421 1.0, i0data_sorted, a4.size()*x1.size(), i1data_sorted, a4.size()*x1.size(),
422 1.0, odata_sorted, c2.size()*a1.size());
423 }
424 }
425 sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, c2.size(), a1.size(), a3.size(), x0.size());
426 out()->add_block(odata, c2, a3, x0, a1);
427 }
428
compute()429 void Task664::Task_local::compute() {
430 const Index a3 = b(0);
431 const Index a4 = b(1);
432 const Index x0 = b(2);
433 const Index x1 = b(3);
434 // tensor label: I1205
435 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a3, a4, x0, x1)]);
436 std::fill_n(odata.get(), out()->get_size(a3, a4, x0, x1), 0.0);
437 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a3, a4, x0, x1)]);
438 std::fill_n(odata_sorted.get(), out()->get_size(a3, a4, x0, x1), 0.0);
439 for (auto& x3 : *range_[1]) {
440 for (auto& x2 : *range_[1]) {
441 // tensor label: Gamma33
442 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
443 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
444 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
445 // tensor label: t2
446 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a3, x2, a4);
447 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a3, x2, a4)]);
448 sort_indices<0,2,1,3,0,1,-2,1>(i1data, i1data_sorted, x3.size(), a3.size(), x2.size(), a4.size());
449 zgemm3m_("T", "N", x0.size()*x1.size(), a3.size()*a4.size(), x3.size()*x2.size(),
450 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
451 1.0, odata_sorted, x0.size()*x1.size());
452 }
453 }
454 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a3.size(), a4.size());
455 out()->add_block(odata, a3, a4, x0, x1);
456 }
457
compute()458 void Task665::Task_local::compute() {
459 const Index c2 = b(0);
460 const Index a3 = b(1);
461 const Index x0 = b(2);
462 const Index a1 = b(3);
463 // tensor label: I134
464 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
465 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
466 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
467 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
468 for (auto& a4 : *range_[2]) {
469 for (auto& x1 : *range_[1]) {
470 // tensor label: v2
471 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a4, x1, c2, a3);
472 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(a4, x1, c2, a3)]);
473 sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, a4.size(), x1.size(), c2.size(), a3.size());
474 // tensor label: I1208
475 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a1, a4, x0, x1);
476 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a1, a4, x0, x1)]);
477 sort_indices<1,3,0,2,0,1,1,1>(i1data, i1data_sorted, a1.size(), a4.size(), x0.size(), x1.size());
478 zgemm3m_("T", "N", c2.size()*a3.size(), a1.size()*x0.size(), a4.size()*x1.size(),
479 1.0, i0data_sorted, a4.size()*x1.size(), i1data_sorted, a4.size()*x1.size(),
480 1.0, odata_sorted, c2.size()*a3.size());
481 }
482 }
483 sort_indices<0,1,3,2,1,1,1,1>(odata_sorted, odata, c2.size(), a3.size(), a1.size(), x0.size());
484 out()->add_block(odata, c2, a3, x0, a1);
485 }
486
compute()487 void Task666::Task_local::compute() {
488 const Index a1 = b(0);
489 const Index a4 = b(1);
490 const Index x0 = b(2);
491 const Index x1 = b(3);
492 // tensor label: I1208
493 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, a4, x0, x1)]);
494 std::fill_n(odata.get(), out()->get_size(a1, a4, x0, x1), 0.0);
495 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, a4, x0, x1)]);
496 std::fill_n(odata_sorted.get(), out()->get_size(a1, a4, x0, x1), 0.0);
497 for (auto& x3 : *range_[1]) {
498 for (auto& x2 : *range_[1]) {
499 // tensor label: Gamma33
500 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
501 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
502 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
503 // tensor label: t2
504 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a1, x2, a4);
505 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a1, x2, a4)]);
506 sort_indices<0,2,1,3,0,1,2,1>(i1data, i1data_sorted, x3.size(), a1.size(), x2.size(), a4.size());
507 zgemm3m_("T", "N", x0.size()*x1.size(), a1.size()*a4.size(), x3.size()*x2.size(),
508 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
509 1.0, odata_sorted, x0.size()*x1.size());
510 }
511 }
512 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a1.size(), a4.size());
513 out()->add_block(odata, a1, a4, x0, x1);
514 }
515
compute()516 void Task667::Task_local::compute() {
517 const Index c2 = b(0);
518 const Index a3 = b(1);
519 const Index x0 = b(2);
520 const Index a1 = b(3);
521 // tensor label: I134
522 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
523 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
524 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
525 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
526 for (auto& x1 : *range_[1]) {
527 for (auto& a4 : *range_[2]) {
528 // tensor label: v2
529 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(c2, x1, a4, a1);
530 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(c2, x1, a4, a1)]);
531 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, c2.size(), x1.size(), a4.size(), a1.size());
532 // tensor label: I1211
533 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, a4, x1, x0);
534 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, a4, x1, x0)]);
535 sort_indices<2,1,0,3,0,1,1,1>(i1data, i1data_sorted, a3.size(), a4.size(), x1.size(), x0.size());
536 zgemm3m_("T", "N", c2.size()*a1.size(), a3.size()*x0.size(), a4.size()*x1.size(),
537 1.0, i0data_sorted, a4.size()*x1.size(), i1data_sorted, a4.size()*x1.size(),
538 1.0, odata_sorted, c2.size()*a1.size());
539 }
540 }
541 sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, c2.size(), a1.size(), a3.size(), x0.size());
542 out()->add_block(odata, c2, a3, x0, a1);
543 }
544
compute()545 void Task668::Task_local::compute() {
546 const Index a3 = b(0);
547 const Index a4 = b(1);
548 const Index x1 = b(2);
549 const Index x0 = b(3);
550 // tensor label: I1211
551 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a3, a4, x1, x0)]);
552 std::fill_n(odata.get(), out()->get_size(a3, a4, x1, x0), 0.0);
553 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a3, a4, x1, x0)]);
554 std::fill_n(odata_sorted.get(), out()->get_size(a3, a4, x1, x0), 0.0);
555 for (auto& x3 : *range_[1]) {
556 for (auto& x2 : *range_[1]) {
557 // tensor label: Gamma368
558 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x1, x2, x0);
559 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x1, x2, x0)]);
560 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x1.size(), x2.size(), x0.size());
561 // tensor label: t2
562 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a3, x2, a4);
563 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a3, x2, a4)]);
564 sort_indices<0,2,1,3,0,1,2,1>(i1data, i1data_sorted, x3.size(), a3.size(), x2.size(), a4.size());
565 zgemm3m_("T", "N", x1.size()*x0.size(), a3.size()*a4.size(), x3.size()*x2.size(),
566 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
567 1.0, odata_sorted, x1.size()*x0.size());
568 }
569 }
570 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), a3.size(), a4.size());
571 out()->add_block(odata, a3, a4, x1, x0);
572 }
573
compute()574 void Task669::Task_local::compute() {
575 const Index c2 = b(0);
576 const Index a3 = b(1);
577 const Index x0 = b(2);
578 const Index a1 = b(3);
579 // tensor label: I134
580 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
581 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
582 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
583 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
584 for (auto& x1 : *range_[1]) {
585 for (auto& a4 : *range_[2]) {
586 // tensor label: v2
587 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(c2, x1, a4, a3);
588 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(c2, x1, a4, a3)]);
589 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, c2.size(), x1.size(), a4.size(), a3.size());
590 // tensor label: I1214
591 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a1, a4, x0, x1);
592 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a1, a4, x0, x1)]);
593 sort_indices<3,1,0,2,0,1,1,1>(i1data, i1data_sorted, a1.size(), a4.size(), x0.size(), x1.size());
594 zgemm3m_("T", "N", c2.size()*a3.size(), a1.size()*x0.size(), a4.size()*x1.size(),
595 1.0, i0data_sorted, a4.size()*x1.size(), i1data_sorted, a4.size()*x1.size(),
596 1.0, odata_sorted, c2.size()*a3.size());
597 }
598 }
599 sort_indices<0,1,3,2,1,1,1,1>(odata_sorted, odata, c2.size(), a3.size(), a1.size(), x0.size());
600 out()->add_block(odata, c2, a3, x0, a1);
601 }
602
compute()603 void Task670::Task_local::compute() {
604 const Index a1 = b(0);
605 const Index a4 = b(1);
606 const Index x0 = b(2);
607 const Index x1 = b(3);
608 // tensor label: I1214
609 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, a4, x0, x1)]);
610 std::fill_n(odata.get(), out()->get_size(a1, a4, x0, x1), 0.0);
611 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, a4, x0, x1)]);
612 std::fill_n(odata_sorted.get(), out()->get_size(a1, a4, x0, x1), 0.0);
613 for (auto& x3 : *range_[1]) {
614 for (auto& x2 : *range_[1]) {
615 // tensor label: Gamma33
616 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
617 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
618 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
619 // tensor label: t2
620 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a1, x2, a4);
621 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a1, x2, a4)]);
622 sort_indices<0,2,1,3,0,1,-2,1>(i1data, i1data_sorted, x3.size(), a1.size(), x2.size(), a4.size());
623 zgemm3m_("T", "N", x0.size()*x1.size(), a1.size()*a4.size(), x3.size()*x2.size(),
624 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
625 1.0, odata_sorted, x0.size()*x1.size());
626 }
627 }
628 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a1.size(), a4.size());
629 out()->add_block(odata, a1, a4, x0, x1);
630 }
631
compute()632 void Task671::Task_local::compute() {
633 const Index c2 = b(0);
634 const Index a3 = b(1);
635 const Index x0 = b(2);
636 const Index a1 = b(3);
637 // tensor label: I134
638 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
639 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
640 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
641 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
642 for (auto& x3 : *range_[1]) {
643 // tensor label: Gamma428
644 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0);
645 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0)]);
646 sort_indices<0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size());
647 // tensor label: I1297
648 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a3, c2, a1);
649 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a3, c2, a1)]);
650 sort_indices<0,1,2,3,0,1,1,1>(i1data, i1data_sorted, x3.size(), a3.size(), c2.size(), a1.size());
651 zgemm3m_("T", "N", x0.size(), a3.size()*c2.size()*a1.size(), x3.size(),
652 1.0, i0data_sorted, x3.size(), i1data_sorted, x3.size(),
653 1.0, odata_sorted, x0.size());
654 }
655 sort_indices<2,1,0,3,1,1,1,1>(odata_sorted, odata, x0.size(), a3.size(), c2.size(), a1.size());
656 out()->add_block(odata, c2, a3, x0, a1);
657 }
658
compute()659 void Task672::Task_local::compute() {
660 const Index x3 = b(0);
661 const Index a3 = b(1);
662 const Index c2 = b(2);
663 const Index a1 = b(3);
664 // tensor label: I1297
665 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x3, a3, c2, a1)]);
666 std::fill_n(odata.get(), out()->get_size(x3, a3, c2, a1), 0.0);
667 {
668 // tensor label: t2
669 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a3, c2, a1);
670 sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x3.size(), a3.size(), c2.size(), a1.size());
671 }
672 {
673 // tensor label: t2
674 std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x3, a1, c2, a3);
675 sort_indices<0,3,2,1,1,1,-1,1>(i1data, odata, x3.size(), a1.size(), c2.size(), a3.size());
676 }
677 out()->add_block(odata, x3, a3, c2, a1);
678 }
679
compute()680 void Task673::Task_local::compute() {
681 const Index c2 = b(0);
682 const Index a3 = b(1);
683 const Index x0 = b(2);
684 const Index a1 = b(3);
685 // tensor label: I134
686 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
687 std::fill_n(odata.get(), out()->get_size(c2, a3, x0, a1), 0.0);
688 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c2, a3, x0, a1)]);
689 std::fill_n(odata_sorted.get(), out()->get_size(c2, a3, x0, a1), 0.0);
690 for (auto& x5 : *range_[1]) {
691 // tensor label: Gamma430
692 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0);
693 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0)]);
694 sort_indices<0,1,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size());
695 // tensor label: I1301
696 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x5, a3, c2, a1);
697 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x5, a3, c2, a1)]);
698 sort_indices<0,1,2,3,0,1,1,1>(i1data, i1data_sorted, x5.size(), a3.size(), c2.size(), a1.size());
699 zgemm3m_("T", "N", x0.size(), a3.size()*c2.size()*a1.size(), x5.size(),
700 1.0, i0data_sorted, x5.size(), i1data_sorted, x5.size(),
701 1.0, odata_sorted, x0.size());
702 }
703 sort_indices<2,1,0,3,1,1,1,1>(odata_sorted, odata, x0.size(), a3.size(), c2.size(), a1.size());
704 out()->add_block(odata, c2, a3, x0, a1);
705 }
706
compute()707 void Task674::Task_local::compute() {
708 const Index x5 = b(0);
709 const Index a3 = b(1);
710 const Index c2 = b(2);
711 const Index a1 = b(3);
712 // tensor label: I1301
713 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x5, a3, c2, a1)]);
714 std::fill_n(odata.get(), out()->get_size(x5, a3, c2, a1), 0.0);
715 {
716 // tensor label: t2
717 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, a3, c2, a1);
718 sort_indices<0,1,2,3,1,1,1,2>(i0data, odata, x5.size(), a3.size(), c2.size(), a1.size());
719 }
720 {
721 // tensor label: t2
722 std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x5, a1, c2, a3);
723 sort_indices<0,3,2,1,1,1,-1,2>(i1data, odata, x5.size(), a1.size(), c2.size(), a3.size());
724 }
725 out()->add_block(odata, x5, a3, c2, a1);
726 }
727
compute()728 void Task675::Task_local::compute() {
729 const Index x1 = b(0);
730 const Index a2 = b(1);
731 const Index x0 = b(2);
732 const Index a1 = b(3);
733 // tensor label: r
734 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x1, a2, x0, a1)]);
735 std::fill_n(odata.get(), out()->get_size(x1, a2, x0, a1), 0.0);
736 {
737 // tensor label: I173
738 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a1, x0, x1, a2);
739 sort_indices<2,3,1,0,1,1,1,1>(i0data, odata, a1.size(), x0.size(), x1.size(), a2.size());
740 }
741 {
742 // tensor label: I173
743 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a2, x1, x0, a1);
744 sort_indices<1,0,2,3,1,1,1,1>(i0data, odata, a2.size(), x1.size(), x0.size(), a1.size());
745 }
746 out()->add_block(odata, x1, a2, x0, a1);
747 }
748
compute()749 void Task676::Task_local::compute() {
750 const Index a1 = b(0);
751 const Index x0 = b(1);
752 const Index x1 = b(2);
753 const Index a2 = b(3);
754 // tensor label: I173
755 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
756 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
757 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
758 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
759 for (auto& x2 : *range_[1]) {
760 // tensor label: h1
761 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x2, a2);
762 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x2, a2)]);
763 sort_indices<0,1,0,1,1,1>(i0data, i0data_sorted, x2.size(), a2.size());
764 // tensor label: I174
765 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a1, x0, x2, x1);
766 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a1, x0, x2, x1)]);
767 sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, a1.size(), x0.size(), x2.size(), x1.size());
768 zgemm3m_("T", "N", a2.size(), a1.size()*x0.size()*x1.size(), x2.size(),
769 1.0, i0data_sorted, x2.size(), i1data_sorted, x2.size(),
770 1.0, odata_sorted, a2.size());
771 }
772 sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, a2.size(), a1.size(), x0.size(), x1.size());
773 out()->add_block(odata, a1, x0, x1, a2);
774 }
775
compute()776 void Task677::Task_local::compute() {
777 const Index a1 = b(0);
778 const Index x0 = b(1);
779 const Index x2 = b(2);
780 const Index x1 = b(3);
781 // tensor label: I174
782 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x2, x1)]);
783 std::fill_n(odata.get(), out()->get_size(a1, x0, x2, x1), 0.0);
784 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x2, x1)]);
785 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x2, x1), 0.0);
786 for (auto& x5 : *range_[1]) {
787 for (auto& x4 : *range_[1]) {
788 for (auto& x3 : *range_[1]) {
789 // tensor label: Gamma32
790 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x3, x2, x1);
791 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x3, x2, x1)]);
792 sort_indices<0,2,3,1,4,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
793 // tensor label: t2
794 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x5, a1, x4, x3);
795 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x5, a1, x4, x3)]);
796 sort_indices<0,2,3,1,0,1,1,1>(i1data, i1data_sorted, x5.size(), a1.size(), x4.size(), x3.size());
797 zgemm3m_("T", "N", x0.size()*x2.size()*x1.size(), a1.size(), x5.size()*x4.size()*x3.size(),
798 1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
799 1.0, odata_sorted, x0.size()*x2.size()*x1.size());
800 }
801 }
802 }
803 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x2.size(), x1.size(), a1.size());
804 out()->add_block(odata, a1, x0, x2, x1);
805 }
806
compute()807 void Task678::Task_local::compute() {
808 const Index a1 = b(0);
809 const Index x0 = b(1);
810 const Index x1 = b(2);
811 const Index a2 = b(3);
812 // tensor label: I173
813 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
814 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
815 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
816 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
817 for (auto& x3 : *range_[1]) {
818 for (auto& x2 : *range_[1]) {
819 // tensor label: Gamma33
820 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x0, x2, x1);
821 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x0, x2, x1)]);
822 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x0.size(), x2.size(), x1.size());
823 // tensor label: I177
824 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, x3, a1, a2);
825 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, x3, a1, a2)]);
826 sort_indices<1,0,2,3,0,1,1,1>(i1data, i1data_sorted, x2.size(), x3.size(), a1.size(), a2.size());
827 zgemm3m_("T", "N", x0.size()*x1.size(), a1.size()*a2.size(), x2.size()*x3.size(),
828 1.0, i0data_sorted, x2.size()*x3.size(), i1data_sorted, x2.size()*x3.size(),
829 1.0, odata_sorted, x0.size()*x1.size());
830 }
831 }
832 sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a1.size(), a2.size());
833 out()->add_block(odata, a1, x0, x1, a2);
834 }
835
compute()836 void Task679::Task_local::compute() {
837 const Index x2 = b(0);
838 const Index x3 = b(1);
839 const Index a1 = b(2);
840 const Index a2 = b(3);
841 // tensor label: I177
842 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
843 std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
844 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
845 std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
846 for (auto& c3 : *range_[0]) {
847 // tensor label: t2
848 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, c3, a2);
849 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, c3, a2)]);
850 sort_indices<2,0,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), c3.size(), a2.size());
851 // tensor label: h1
852 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, c3);
853 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, c3)]);
854 sort_indices<1,0,0,1,-1,1>(i1data, i1data_sorted, x2.size(), c3.size());
855 zgemm3m_("T", "N", x3.size()*a1.size()*a2.size(), x2.size(), c3.size(),
856 1.0, i0data_sorted, c3.size(), i1data_sorted, c3.size(),
857 1.0, odata_sorted, x3.size()*a1.size()*a2.size());
858 }
859 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), a2.size(), x2.size());
860 out()->add_block(odata, x2, x3, a1, a2);
861 }
862
compute()863 void Task680::Task_local::compute() {
864 const Index x2 = b(0);
865 const Index x3 = b(1);
866 const Index a1 = b(2);
867 const Index a2 = b(3);
868 // tensor label: I177
869 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
870 std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
871 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
872 std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
873 for (auto& a3 : *range_[2]) {
874 // tensor label: t2
875 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, x2, a3);
876 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, x2, a3)]);
877 sort_indices<3,0,1,2,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), x2.size(), a3.size());
878 // tensor label: h1
879 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, a2);
880 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, a2)]);
881 sort_indices<0,1,0,1,2,1>(i1data, i1data_sorted, a3.size(), a2.size());
882 zgemm3m_("T", "N", x3.size()*a1.size()*x2.size(), a2.size(), a3.size(),
883 1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
884 1.0, odata_sorted, x3.size()*a1.size()*x2.size());
885 }
886 sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
887 out()->add_block(odata, x2, x3, a1, a2);
888 }
889
compute()890 void Task681::Task_local::compute() {
891 const Index x2 = b(0);
892 const Index x3 = b(1);
893 const Index a1 = b(2);
894 const Index a2 = b(3);
895 // tensor label: I177
896 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
897 std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
898 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
899 std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
900 for (auto& c4 : *range_[0]) {
901 for (auto& a3 : *range_[2]) {
902 // tensor label: t2
903 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, c4, a3);
904 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, c4, a3)]);
905 sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), c4.size(), a3.size());
906 // tensor label: v2
907 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, c4, a3, a2);
908 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, c4, a3, a2)]);
909 sort_indices<1,2,0,3,0,1,-1,1>(i1data, i1data_sorted, x2.size(), c4.size(), a3.size(), a2.size());
910 zgemm3m_("T", "N", x3.size()*a1.size(), x2.size()*a2.size(), c4.size()*a3.size(),
911 1.0, i0data_sorted, c4.size()*a3.size(), i1data_sorted, c4.size()*a3.size(),
912 1.0, odata_sorted, x3.size()*a1.size());
913 }
914 }
915 sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
916 out()->add_block(odata, x2, x3, a1, a2);
917 }
918
compute()919 void Task682::Task_local::compute() {
920 const Index x2 = b(0);
921 const Index x3 = b(1);
922 const Index a1 = b(2);
923 const Index a2 = b(3);
924 // tensor label: I177
925 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
926 std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
927 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
928 std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
929 for (auto& a4 : *range_[2]) {
930 for (auto& c3 : *range_[0]) {
931 // tensor label: t2
932 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a4, c3, a1);
933 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a4, c3, a1)]);
934 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), a4.size(), c3.size(), a1.size());
935 // tensor label: v2
936 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, a2, a4, c3);
937 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, a2, a4, c3)]);
938 sort_indices<2,3,0,1,0,1,-1,1>(i1data, i1data_sorted, x2.size(), a2.size(), a4.size(), c3.size());
939 zgemm3m_("T", "N", x3.size()*a1.size(), x2.size()*a2.size(), a4.size()*c3.size(),
940 1.0, i0data_sorted, a4.size()*c3.size(), i1data_sorted, a4.size()*c3.size(),
941 1.0, odata_sorted, x3.size()*a1.size());
942 }
943 }
944 sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
945 out()->add_block(odata, x2, x3, a1, a2);
946 }
947
compute()948 void Task683::Task_local::compute() {
949 const Index x2 = b(0);
950 const Index x3 = b(1);
951 const Index a1 = b(2);
952 const Index a2 = b(3);
953 // tensor label: I177
954 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
955 std::fill_n(odata.get(), out()->get_size(x2, x3, a1, a2), 0.0);
956 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, x3, a1, a2)]);
957 std::fill_n(odata_sorted.get(), out()->get_size(x2, x3, a1, a2), 0.0);
958 for (auto& c3 : *range_[0]) {
959 for (auto& a4 : *range_[2]) {
960 // tensor label: t2
961 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a1, c3, a4);
962 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a1, c3, a4)]);
963 sort_indices<2,3,0,1,0,1,1,1>(i0data, i0data_sorted, x3.size(), a1.size(), c3.size(), a4.size());
964 // tensor label: v2
965 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, a2, a4, c3);
966 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, a2, a4, c3)]);
967 sort_indices<3,2,0,1,0,1,1,1>(i1data, i1data_sorted, x2.size(), a2.size(), a4.size(), c3.size());
968 zgemm3m_("T", "N", x3.size()*a1.size(), x2.size()*a2.size(), a4.size()*c3.size(),
969 1.0, i0data_sorted, a4.size()*c3.size(), i1data_sorted, a4.size()*c3.size(),
970 1.0, odata_sorted, x3.size()*a1.size());
971 }
972 }
973 sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
974 out()->add_block(odata, x2, x3, a1, a2);
975 }
976
compute()977 void Task684::Task_local::compute() {
978 const Index a1 = b(0);
979 const Index x0 = b(1);
980 const Index x1 = b(2);
981 const Index a2 = b(3);
982 // tensor label: I173
983 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
984 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
985 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
986 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
987 for (auto& c3 : *range_[0]) {
988 for (auto& x5 : *range_[1]) {
989 for (auto& x4 : *range_[1]) {
990 // tensor label: t2
991 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(c3, a1, x5, x4);
992 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(c3, a1, x5, x4)]);
993 sort_indices<0,2,3,1,0,1,1,1>(i0data, i0data_sorted, c3.size(), a1.size(), x5.size(), x4.size());
994 // tensor label: I1217
995 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a2, c3, x5, x4, x1, x0);
996 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a2, c3, x5, x4, x1, x0)]);
997 sort_indices<1,2,3,0,4,5,0,1,1,1>(i1data, i1data_sorted, a2.size(), c3.size(), x5.size(), x4.size(), x1.size(), x0.size());
998 zgemm3m_("T", "N", a1.size(), a2.size()*x1.size()*x0.size(), c3.size()*x5.size()*x4.size(),
999 1.0, i0data_sorted, c3.size()*x5.size()*x4.size(), i1data_sorted, c3.size()*x5.size()*x4.size(),
1000 1.0, odata_sorted, a1.size());
1001 }
1002 }
1003 }
1004 sort_indices<0,3,2,1,1,1,1,1>(odata_sorted, odata, a1.size(), a2.size(), x1.size(), x0.size());
1005 out()->add_block(odata, a1, x0, x1, a2);
1006 }
1007
compute()1008 void Task685::Task_local::compute() {
1009 const Index a2 = b(0);
1010 const Index c3 = b(1);
1011 const Index x5 = b(2);
1012 const Index x4 = b(3);
1013 const Index x1 = b(4);
1014 const Index x0 = b(5);
1015 // tensor label: I1217
1016 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a2, c3, x5, x4, x1, x0)]);
1017 std::fill_n(odata.get(), out()->get_size(a2, c3, x5, x4, x1, x0), 0.0);
1018 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a2, c3, x5, x4, x1, x0)]);
1019 std::fill_n(odata_sorted.get(), out()->get_size(a2, c3, x5, x4, x1, x0), 0.0);
1020 for (auto& x3 : *range_[1]) {
1021 for (auto& x2 : *range_[1]) {
1022 // tensor label: Gamma396
1023 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x4, x3, x1, x2, x0);
1024 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x4, x3, x1, x2, x0)]);
1025 sort_indices<2,4,0,1,3,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x4.size(), x3.size(), x1.size(), x2.size(), x0.size());
1026 // tensor label: v2
1027 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, a2, x2, c3);
1028 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, a2, x2, c3)]);
1029 sort_indices<0,2,1,3,0,1,1,1>(i1data, i1data_sorted, x3.size(), a2.size(), x2.size(), c3.size());
1030 zgemm3m_("T", "N", x5.size()*x4.size()*x1.size()*x0.size(), a2.size()*c3.size(), x3.size()*x2.size(),
1031 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
1032 1.0, odata_sorted, x5.size()*x4.size()*x1.size()*x0.size());
1033 }
1034 }
1035 sort_indices<4,5,0,1,2,3,1,1,1,1>(odata_sorted, odata, x5.size(), x4.size(), x1.size(), x0.size(), a2.size(), c3.size());
1036 out()->add_block(odata, a2, c3, x5, x4, x1, x0);
1037 }
1038
compute()1039 void Task686::Task_local::compute() {
1040 const Index a1 = b(0);
1041 const Index x0 = b(1);
1042 const Index x1 = b(2);
1043 const Index a2 = b(3);
1044 // tensor label: I173
1045 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1046 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1047 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1048 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1049 for (auto& x7 : *range_[1]) {
1050 for (auto& x6 : *range_[1]) {
1051 for (auto& x5 : *range_[1]) {
1052 // tensor label: t2
1053 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x7, a1, x6, x5);
1054 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x7, a1, x6, x5)]);
1055 sort_indices<0,2,3,1,0,1,1,1>(i0data, i0data_sorted, x7.size(), a1.size(), x6.size(), x5.size());
1056 // tensor label: I1220
1057 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a2, x7, x0, x6, x5, x1);
1058 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a2, x7, x0, x6, x5, x1)]);
1059 sort_indices<1,3,4,0,2,5,0,1,1,1>(i1data, i1data_sorted, a2.size(), x7.size(), x0.size(), x6.size(), x5.size(), x1.size());
1060 zgemm3m_("T", "N", a1.size(), a2.size()*x0.size()*x1.size(), x7.size()*x6.size()*x5.size(),
1061 1.0, i0data_sorted, x7.size()*x6.size()*x5.size(), i1data_sorted, x7.size()*x6.size()*x5.size(),
1062 1.0, odata_sorted, a1.size());
1063 }
1064 }
1065 }
1066 sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, a1.size(), a2.size(), x0.size(), x1.size());
1067 out()->add_block(odata, a1, x0, x1, a2);
1068 }
1069
compute()1070 void Task687::Task_local::compute() {
1071 const Index a2 = b(0);
1072 const Index x7 = b(1);
1073 const Index x0 = b(2);
1074 const Index x6 = b(3);
1075 const Index x5 = b(4);
1076 const Index x1 = b(5);
1077 // tensor label: I1220
1078 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a2, x7, x0, x6, x5, x1)]);
1079 std::fill_n(odata.get(), out()->get_size(a2, x7, x0, x6, x5, x1), 0.0);
1080 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a2, x7, x0, x6, x5, x1)]);
1081 std::fill_n(odata_sorted.get(), out()->get_size(a2, x7, x0, x6, x5, x1), 0.0);
1082 for (auto& x4 : *range_[1]) {
1083 for (auto& x3 : *range_[1]) {
1084 for (auto& x2 : *range_[1]) {
1085 // tensor label: Gamma397
1086 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x7, x0, x6, x5, x4, x1, x3, x2);
1087 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x7, x0, x6, x5, x4, x1, x3, x2)]);
1088 sort_indices<4,6,7,0,1,2,3,5,0,1,1,1>(i0data, i0data_sorted, x7.size(), x0.size(), x6.size(), x5.size(), x4.size(), x1.size(), x3.size(), x2.size());
1089 // tensor label: v2
1090 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x4, a2, x3, x2);
1091 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x4, a2, x3, x2)]);
1092 sort_indices<0,2,3,1,0,1,1,2>(i1data, i1data_sorted, x4.size(), a2.size(), x3.size(), x2.size());
1093 zgemm3m_("T", "N", x7.size()*x0.size()*x6.size()*x5.size()*x1.size(), a2.size(), x4.size()*x3.size()*x2.size(),
1094 1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
1095 1.0, odata_sorted, x7.size()*x0.size()*x6.size()*x5.size()*x1.size());
1096 }
1097 }
1098 }
1099 sort_indices<5,0,1,2,3,4,1,1,1,1>(odata_sorted, odata, x7.size(), x0.size(), x6.size(), x5.size(), x1.size(), a2.size());
1100 out()->add_block(odata, a2, x7, x0, x6, x5, x1);
1101 }
1102
compute()1103 void Task688::Task_local::compute() {
1104 const Index a2 = b(0);
1105 const Index x7 = b(1);
1106 const Index x0 = b(2);
1107 const Index x6 = b(3);
1108 const Index x5 = b(4);
1109 const Index x1 = b(5);
1110 // tensor label: I1220
1111 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a2, x7, x0, x6, x5, x1)]);
1112 std::fill_n(odata.get(), out()->get_size(a2, x7, x0, x6, x5, x1), 0.0);
1113 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a2, x7, x0, x6, x5, x1)]);
1114 std::fill_n(odata_sorted.get(), out()->get_size(a2, x7, x0, x6, x5, x1), 0.0);
1115 for (auto& x4 : *range_[1]) {
1116 for (auto& x3 : *range_[1]) {
1117 for (auto& x2 : *range_[1]) {
1118 // tensor label: Gamma236
1119 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x7, x0, x6, x5, x4, x3, x2, x1);
1120 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x7, x0, x6, x5, x4, x3, x2, x1)]);
1121 sort_indices<4,5,6,0,1,2,3,7,0,1,1,1>(i0data, i0data_sorted, x7.size(), x0.size(), x6.size(), x5.size(), x4.size(), x3.size(), x2.size(), x1.size());
1122 // tensor label: v2
1123 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x4, x3, x2, a2);
1124 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x4, x3, x2, a2)]);
1125 sort_indices<0,1,2,3,0,1,1,2>(i1data, i1data_sorted, x4.size(), x3.size(), x2.size(), a2.size());
1126 zgemm3m_("T", "N", x7.size()*x0.size()*x6.size()*x5.size()*x1.size(), a2.size(), x4.size()*x3.size()*x2.size(),
1127 1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
1128 1.0, odata_sorted, x7.size()*x0.size()*x6.size()*x5.size()*x1.size());
1129 }
1130 }
1131 }
1132 sort_indices<5,0,1,2,3,4,1,1,1,1>(odata_sorted, odata, x7.size(), x0.size(), x6.size(), x5.size(), x1.size(), a2.size());
1133 out()->add_block(odata, a2, x7, x0, x6, x5, x1);
1134 }
1135
compute()1136 void Task689::Task_local::compute() {
1137 const Index a1 = b(0);
1138 const Index x0 = b(1);
1139 const Index x1 = b(2);
1140 const Index a2 = b(3);
1141 // tensor label: I173
1142 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1143 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1144 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1145 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1146 for (auto& x2 : *range_[1]) {
1147 for (auto& a3 : *range_[2]) {
1148 // tensor label: v2
1149 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x2, a1, a3, a2);
1150 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x2, a1, a3, a2)]);
1151 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x2.size(), a1.size(), a3.size(), a2.size());
1152 // tensor label: I1226
1153 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, x1, x2, x0);
1154 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, x1, x2, x0)]);
1155 sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, a3.size(), x1.size(), x2.size(), x0.size());
1156 zgemm3m_("T", "N", a1.size()*a2.size(), x1.size()*x0.size(), a3.size()*x2.size(),
1157 1.0, i0data_sorted, a3.size()*x2.size(), i1data_sorted, a3.size()*x2.size(),
1158 1.0, odata_sorted, a1.size()*a2.size());
1159 }
1160 }
1161 sort_indices<0,3,2,1,1,1,1,1>(odata_sorted, odata, a1.size(), a2.size(), x1.size(), x0.size());
1162 out()->add_block(odata, a1, x0, x1, a2);
1163 }
1164
compute()1165 void Task690::Task_local::compute() {
1166 const Index a3 = b(0);
1167 const Index x1 = b(1);
1168 const Index x2 = b(2);
1169 const Index x0 = b(3);
1170 // tensor label: I1226
1171 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a3, x1, x2, x0)]);
1172 std::fill_n(odata.get(), out()->get_size(a3, x1, x2, x0), 0.0);
1173 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a3, x1, x2, x0)]);
1174 std::fill_n(odata_sorted.get(), out()->get_size(a3, x1, x2, x0), 0.0);
1175 for (auto& x5 : *range_[1]) {
1176 for (auto& x4 : *range_[1]) {
1177 for (auto& x3 : *range_[1]) {
1178 // tensor label: Gamma336
1179 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x1, x4, x3, x2, x0);
1180 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x1, x4, x3, x2, x0)]);
1181 sort_indices<0,2,3,1,4,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x1.size(), x4.size(), x3.size(), x2.size(), x0.size());
1182 // tensor label: t2
1183 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x5, a3, x4, x3);
1184 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x5, a3, x4, x3)]);
1185 sort_indices<0,2,3,1,0,1,-1,1>(i1data, i1data_sorted, x5.size(), a3.size(), x4.size(), x3.size());
1186 zgemm3m_("T", "N", x1.size()*x2.size()*x0.size(), a3.size(), x5.size()*x4.size()*x3.size(),
1187 1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
1188 1.0, odata_sorted, x1.size()*x2.size()*x0.size());
1189 }
1190 }
1191 }
1192 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x1.size(), x2.size(), x0.size(), a3.size());
1193 out()->add_block(odata, a3, x1, x2, x0);
1194 }
1195
compute()1196 void Task691::Task_local::compute() {
1197 const Index a1 = b(0);
1198 const Index x0 = b(1);
1199 const Index x1 = b(2);
1200 const Index a2 = b(3);
1201 // tensor label: I173
1202 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1203 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1204 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1205 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1206 for (auto& x5 : *range_[1]) {
1207 for (auto& c3 : *range_[0]) {
1208 // tensor label: t2
1209 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, a1, c3, a2);
1210 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, a1, c3, a2)]);
1211 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), a1.size(), c3.size(), a2.size());
1212 // tensor label: I1232
1213 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(c3, x5, x0, x1);
1214 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(c3, x5, x0, x1)]);
1215 sort_indices<1,0,2,3,0,1,1,1>(i1data, i1data_sorted, c3.size(), x5.size(), x0.size(), x1.size());
1216 zgemm3m_("T", "N", a1.size()*a2.size(), x0.size()*x1.size(), c3.size()*x5.size(),
1217 1.0, i0data_sorted, c3.size()*x5.size(), i1data_sorted, c3.size()*x5.size(),
1218 1.0, odata_sorted, a1.size()*a2.size());
1219 }
1220 }
1221 sort_indices<0,2,3,1,1,1,1,1>(odata_sorted, odata, a1.size(), a2.size(), x0.size(), x1.size());
1222 out()->add_block(odata, a1, x0, x1, a2);
1223 }
1224
compute()1225 void Task692::Task_local::compute() {
1226 const Index c3 = b(0);
1227 const Index x5 = b(1);
1228 const Index x0 = b(2);
1229 const Index x1 = b(3);
1230 // tensor label: I1232
1231 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c3, x5, x0, x1)]);
1232 std::fill_n(odata.get(), out()->get_size(c3, x5, x0, x1), 0.0);
1233 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c3, x5, x0, x1)]);
1234 std::fill_n(odata_sorted.get(), out()->get_size(c3, x5, x0, x1), 0.0);
1235 for (auto& x4 : *range_[1]) {
1236 for (auto& x3 : *range_[1]) {
1237 for (auto& x2 : *range_[1]) {
1238 // tensor label: Gamma391
1239 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x1, x3, x2);
1240 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x1, x3, x2)]);
1241 sort_indices<2,4,5,0,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x1.size(), x3.size(), x2.size());
1242 // tensor label: v2
1243 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x4, c3, x3, x2);
1244 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x4, c3, x3, x2)]);
1245 sort_indices<0,2,3,1,0,1,-1,2>(i1data, i1data_sorted, x4.size(), c3.size(), x3.size(), x2.size());
1246 zgemm3m_("T", "N", x5.size()*x0.size()*x1.size(), c3.size(), x4.size()*x3.size()*x2.size(),
1247 1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
1248 1.0, odata_sorted, x5.size()*x0.size()*x1.size());
1249 }
1250 }
1251 }
1252 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x0.size(), x1.size(), c3.size());
1253 out()->add_block(odata, c3, x5, x0, x1);
1254 }
1255
compute()1256 void Task693::Task_local::compute() {
1257 const Index c3 = b(0);
1258 const Index x5 = b(1);
1259 const Index x0 = b(2);
1260 const Index x1 = b(3);
1261 // tensor label: I1232
1262 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(c3, x5, x0, x1)]);
1263 std::fill_n(odata.get(), out()->get_size(c3, x5, x0, x1), 0.0);
1264 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(c3, x5, x0, x1)]);
1265 std::fill_n(odata_sorted.get(), out()->get_size(c3, x5, x0, x1), 0.0);
1266 for (auto& x4 : *range_[1]) {
1267 for (auto& x3 : *range_[1]) {
1268 for (auto& x2 : *range_[1]) {
1269 // tensor label: Gamma32
1270 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x3, x2, x1);
1271 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x3, x2, x1)]);
1272 sort_indices<2,3,4,0,1,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
1273 // tensor label: v2
1274 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x4, x3, x2, c3);
1275 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x4, x3, x2, c3)]);
1276 sort_indices<0,1,2,3,0,1,-1,2>(i1data, i1data_sorted, x4.size(), x3.size(), x2.size(), c3.size());
1277 zgemm3m_("T", "N", x5.size()*x0.size()*x1.size(), c3.size(), x4.size()*x3.size()*x2.size(),
1278 1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
1279 1.0, odata_sorted, x5.size()*x0.size()*x1.size());
1280 }
1281 }
1282 }
1283 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x0.size(), x1.size(), c3.size());
1284 out()->add_block(odata, c3, x5, x0, x1);
1285 }
1286
compute()1287 void Task694::Task_local::compute() {
1288 const Index a1 = b(0);
1289 const Index x0 = b(1);
1290 const Index x1 = b(2);
1291 const Index a2 = b(3);
1292 // tensor label: I173
1293 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1294 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1295 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1296 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1297 for (auto& x3 : *range_[1]) {
1298 for (auto& x2 : *range_[1]) {
1299 // tensor label: Gamma368
1300 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, x1, x2, x0);
1301 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, x1, x2, x0)]);
1302 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), x1.size(), x2.size(), x0.size());
1303 // tensor label: I1238
1304 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, a2, x3, a1);
1305 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, a2, x3, a1)]);
1306 sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, x2.size(), a2.size(), x3.size(), a1.size());
1307 zgemm3m_("T", "N", x1.size()*x0.size(), a2.size()*a1.size(), x2.size()*x3.size(),
1308 1.0, i0data_sorted, x2.size()*x3.size(), i1data_sorted, x2.size()*x3.size(),
1309 1.0, odata_sorted, x1.size()*x0.size());
1310 }
1311 }
1312 sort_indices<3,1,0,2,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), a2.size(), a1.size());
1313 out()->add_block(odata, a1, x0, x1, a2);
1314 }
1315
compute()1316 void Task695::Task_local::compute() {
1317 const Index x2 = b(0);
1318 const Index a2 = b(1);
1319 const Index x3 = b(2);
1320 const Index a1 = b(3);
1321 // tensor label: I1238
1322 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(x2, a2, x3, a1)]);
1323 std::fill_n(odata.get(), out()->get_size(x2, a2, x3, a1), 0.0);
1324 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(x2, a2, x3, a1)]);
1325 std::fill_n(odata_sorted.get(), out()->get_size(x2, a2, x3, a1), 0.0);
1326 for (auto& a3 : *range_[2]) {
1327 for (auto& c4 : *range_[0]) {
1328 // tensor label: t2
1329 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x3, a3, c4, a1);
1330 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x3, a3, c4, a1)]);
1331 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x3.size(), a3.size(), c4.size(), a1.size());
1332 // tensor label: v2
1333 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x2, c4, a3, a2);
1334 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x2, c4, a3, a2)]);
1335 sort_indices<2,1,0,3,0,1,1,1>(i1data, i1data_sorted, x2.size(), c4.size(), a3.size(), a2.size());
1336 zgemm3m_("T", "N", x3.size()*a1.size(), x2.size()*a2.size(), c4.size()*a3.size(),
1337 1.0, i0data_sorted, c4.size()*a3.size(), i1data_sorted, c4.size()*a3.size(),
1338 1.0, odata_sorted, x3.size()*a1.size());
1339 }
1340 }
1341 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x3.size(), a1.size(), x2.size(), a2.size());
1342 out()->add_block(odata, x2, a2, x3, a1);
1343 }
1344
compute()1345 void Task696::Task_local::compute() {
1346 const Index a1 = b(0);
1347 const Index x0 = b(1);
1348 const Index x1 = b(2);
1349 const Index a2 = b(3);
1350 // tensor label: I173
1351 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1352 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1353 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1354 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1355 for (auto& x5 : *range_[1]) {
1356 for (auto& x4 : *range_[1]) {
1357 for (auto& x3 : *range_[1]) {
1358 for (auto& x2 : *range_[1]) {
1359 // tensor label: Gamma391
1360 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x1, x3, x2);
1361 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x1, x3, x2)]);
1362 sort_indices<0,2,4,5,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x1.size(), x3.size(), x2.size());
1363 // tensor label: I1250
1364 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a2, x3, x2, x5, a1, x4);
1365 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a2, x3, x2, x5, a1, x4)]);
1366 sort_indices<3,5,1,2,0,4,0,1,1,1>(i1data, i1data_sorted, a2.size(), x3.size(), x2.size(), x5.size(), a1.size(), x4.size());
1367 zgemm3m_("T", "N", x0.size()*x1.size(), a2.size()*a1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
1368 1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
1369 1.0, odata_sorted, x0.size()*x1.size());
1370 }
1371 }
1372 }
1373 }
1374 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a2.size(), a1.size());
1375 out()->add_block(odata, a1, x0, x1, a2);
1376 }
1377
compute()1378 void Task697::Task_local::compute() {
1379 const Index a2 = b(0);
1380 const Index x3 = b(1);
1381 const Index x2 = b(2);
1382 const Index x5 = b(3);
1383 const Index a1 = b(4);
1384 const Index x4 = b(5);
1385 // tensor label: I1250
1386 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a2, x3, x2, x5, a1, x4)]);
1387 std::fill_n(odata.get(), out()->get_size(a2, x3, x2, x5, a1, x4), 0.0);
1388 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a2, x3, x2, x5, a1, x4)]);
1389 std::fill_n(odata_sorted.get(), out()->get_size(a2, x3, x2, x5, a1, x4), 0.0);
1390 for (auto& a3 : *range_[2]) {
1391 // tensor label: t2
1392 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, a1, x4, a3);
1393 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, a1, x4, a3)]);
1394 sort_indices<3,0,1,2,0,1,1,1>(i0data, i0data_sorted, x5.size(), a1.size(), x4.size(), a3.size());
1395 // tensor label: I1251
1396 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(a3, a2, x3, x2);
1397 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(a3, a2, x3, x2)]);
1398 sort_indices<0,1,2,3,0,1,1,1>(i1data, i1data_sorted, a3.size(), a2.size(), x3.size(), x2.size());
1399 zgemm3m_("T", "N", x5.size()*a1.size()*x4.size(), a2.size()*x3.size()*x2.size(), a3.size(),
1400 1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
1401 1.0, odata_sorted, x5.size()*a1.size()*x4.size());
1402 }
1403 sort_indices<3,4,5,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), a1.size(), x4.size(), a2.size(), x3.size(), x2.size());
1404 out()->add_block(odata, a2, x3, x2, x5, a1, x4);
1405 }
1406
compute()1407 void Task698::Task_local::compute() {
1408 const Index a3 = b(0);
1409 const Index a2 = b(1);
1410 const Index x3 = b(2);
1411 const Index x2 = b(3);
1412 // tensor label: I1251
1413 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a3, a2, x3, x2)]);
1414 std::fill_n(odata.get(), out()->get_size(a3, a2, x3, x2), 0.0);
1415 {
1416 // tensor label: v2
1417 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(a3, a2, x3, x2);
1418 sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, a3.size(), a2.size(), x3.size(), x2.size());
1419 }
1420 {
1421 // tensor label: v2
1422 std::unique_ptr<std::complex<double>[]> i1data = in(0)->get_block(x3, x2, a3, a2);
1423 sort_indices<2,3,0,1,1,1,1,1>(i1data, odata, x3.size(), x2.size(), a3.size(), a2.size());
1424 }
1425 out()->add_block(odata, a3, a2, x3, x2);
1426 }
1427
compute()1428 void Task699::Task_local::compute() {
1429 const Index a1 = b(0);
1430 const Index x0 = b(1);
1431 const Index x1 = b(2);
1432 const Index a2 = b(3);
1433 // tensor label: I173
1434 std::unique_ptr<std::complex<double>[]> odata(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1435 std::fill_n(odata.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1436 std::unique_ptr<std::complex<double>[]> odata_sorted(new std::complex<double>[out()->get_size(a1, x0, x1, a2)]);
1437 std::fill_n(odata_sorted.get(), out()->get_size(a1, x0, x1, a2), 0.0);
1438 for (auto& x5 : *range_[1]) {
1439 for (auto& x4 : *range_[1]) {
1440 for (auto& x3 : *range_[1]) {
1441 for (auto& x2 : *range_[1]) {
1442 // tensor label: Gamma32
1443 std::unique_ptr<std::complex<double>[]> i0data = in(0)->get_block(x5, x0, x4, x3, x2, x1);
1444 std::unique_ptr<std::complex<double>[]> i0data_sorted(new std::complex<double>[in(0)->get_size(x5, x0, x4, x3, x2, x1)]);
1445 sort_indices<0,2,3,4,1,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
1446 // tensor label: I1253
1447 std::unique_ptr<std::complex<double>[]> i1data = in(1)->get_block(x3, x2, a2, x5, a1, x4);
1448 std::unique_ptr<std::complex<double>[]> i1data_sorted(new std::complex<double>[in(1)->get_size(x3, x2, a2, x5, a1, x4)]);
1449 sort_indices<3,5,0,1,2,4,0,1,1,1>(i1data, i1data_sorted, x3.size(), x2.size(), a2.size(), x5.size(), a1.size(), x4.size());
1450 zgemm3m_("T", "N", x0.size()*x1.size(), a2.size()*a1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
1451 1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
1452 1.0, odata_sorted, x0.size()*x1.size());
1453 }
1454 }
1455 }
1456 }
1457 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), a2.size(), a1.size());
1458 out()->add_block(odata, a1, x0, x1, a2);
1459 }
1460
1461 #endif
1462