1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: MRCI_tasks3.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/mrci/MRCI_tasks3.h>
29
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::MRCI;
34
compute()35 void Task100::Task_local::compute() {
36 const Index x2 = b(0);
37 const Index x3 = b(1);
38 const Index x1 = b(2);
39 const Index x4 = b(3);
40 const Index x5 = b(4);
41 const Index x6 = b(5);
42 const Index x0 = b(6);
43 const Index x7 = b(7);
44 // tensor label: Gamma533
45 std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x0, x6, x5, x4, x1, x3, x2)]);
46 std::fill_n(odata.get(), out()->get_size(x7, x0, x6, x5, x4, x1, x3, x2), 0.0);
47 {
48 if (x3 == x5) {
49 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0, x6, x2, x4, x1);
50 for (int i2 = 0; i2 != x2.size(); ++i2) {
51 for (int i1 = 0; i1 != x1.size(); ++i1) {
52 for (int i4 = 0; i4 != x4.size(); ++i4) {
53 for (int i5 = 0; i5 != x5.size(); ++i5) {
54 for (int i6 = 0; i6 != x6.size(); ++i6) {
55 for (int i0 = 0; i0 != x0.size(); ++i0) {
56 for (int i7 = 0; i7 != x7.size(); ++i7) {
57 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i5+x3.size()*(i2)))))))]
58 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i2+x2.size()*(i4+x4.size()*(i1)))))];
59 }
60 }
61 }
62 }
63 }
64 }
65 }
66 }
67 }
68 {
69 if (x4 == x5) {
70 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0, x6, x1, x3, x2);
71 for (int i2 = 0; i2 != x2.size(); ++i2) {
72 for (int i3 = 0; i3 != x3.size(); ++i3) {
73 for (int i1 = 0; i1 != x1.size(); ++i1) {
74 for (int i5 = 0; i5 != x5.size(); ++i5) {
75 for (int i6 = 0; i6 != x6.size(); ++i6) {
76 for (int i0 = 0; i0 != x0.size(); ++i0) {
77 for (int i7 = 0; i7 != x7.size(); ++i7) {
78 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i1+x1.size()*(i3+x3.size()*(i2)))))))]
79 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1+x1.size()*(i3+x3.size()*(i2)))))];
80 }
81 }
82 }
83 }
84 }
85 }
86 }
87 }
88 }
89 {
90 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x6, x5, x4, x1, x3, x2);
91 sort_indices<0,1,2,3,4,5,6,7,1,1,1,1>(i0data, odata, x7.size(), x0.size(), x6.size(), x5.size(), x4.size(), x1.size(), x3.size(), x2.size());
92 }
93 out()->add_block(odata, x7, x0, x6, x5, x4, x1, x3, x2);
94 }
95
compute()96 void Task101::Task_local::compute() {
97 const Index x1 = b(0);
98 const Index x3 = b(1);
99 const Index x2 = b(2);
100 const Index x4 = b(3);
101 const Index x0 = b(4);
102 const Index x5 = b(5);
103 // tensor label: Gamma545
104 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x2, x3, x1)]);
105 std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x2, x3, x1), 0.0);
106 {
107 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x2, x3, x1);
108 sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x5.size(), x0.size(), x4.size(), x2.size(), x3.size(), x1.size());
109 }
110 out()->add_block(odata, x5, x0, x4, x2, x3, x1);
111 }
112
compute()113 void Task102::Task_local::compute() {
114 const Index x4 = b(0);
115 const Index x1 = b(1);
116 const Index x5 = b(2);
117 const Index x0 = b(3);
118 const Index x2 = b(4);
119 const Index x3 = b(5);
120 // tensor label: Gamma548
121 std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x5, x1, x4)]);
122 std::fill_n(odata.get(), out()->get_size(x0, x5, x1, x4), 0.0);
123 // associated with merged
124 std::unique_ptr<double[]> fdata = in(4)->get_block(x3, x2);
125 // rdm0 merged case
126 if (x3 == x5 && x1 == x4 && x0 == x2) {
127 std::unique_ptr<double[]> i0data = in(0)->get_block();
128 for (int i5 = 0; i5 != x5.size(); ++i5) {
129 for (int i4 = 0; i4 != x4.size(); ++i4) {
130 for (int i2 = 0; i2 != x2.size(); ++i2) {
131 odata[i2+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))] += -4.0 * i0data[0] * fdata[i5+x3.size()*(i2)];
132 }
133 }
134 }
135 }
136 // rdm0 merged case
137 if (x3 == x4 && x0 == x2 && x1 == x5) {
138 std::unique_ptr<double[]> i0data = in(0)->get_block();
139 for (int i4 = 0; i4 != x4.size(); ++i4) {
140 for (int i2 = 0; i2 != x2.size(); ++i2) {
141 for (int i5 = 0; i5 != x5.size(); ++i5) {
142 odata[i2+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))] += 2.0 * i0data[0] * fdata[i4+x3.size()*(i2)];
143 }
144 }
145 }
146 }
147 if (x0 == x2 && x3 == x4) {
148 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x5);
149 for (int i5 = 0; i5 != x5.size(); ++i5) {
150 for (int i1 = 0; i1 != x1.size(); ++i1) {
151 for (int i2 = 0; i2 != x2.size(); ++i2) {
152 for (int i4 = 0; i4 != x4.size(); ++i4) {
153 odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
154 += (-1.0) * i0data[i1+x1.size()*(i5)] * fdata[i4+x3.size()*(i2)];
155 }
156 }
157 }
158 }
159 }
160 if (x3 == x5 && x0 == x2) {
161 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x4);
162 for (int i4 = 0; i4 != x4.size(); ++i4) {
163 for (int i1 = 0; i1 != x1.size(); ++i1) {
164 for (int i5 = 0; i5 != x5.size(); ++i5) {
165 for (int i2 = 0; i2 != x2.size(); ++i2) {
166 odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
167 += (2.0) * i0data[i1+x1.size()*(i4)] * fdata[i5+x3.size()*(i2)];
168 }
169 }
170 }
171 }
172 }
173 // rdm0 merged case
174 if (x1 == x2 && x0 == x4 && x3 == x5) {
175 std::unique_ptr<double[]> i0data = in(0)->get_block();
176 for (int i2 = 0; i2 != x2.size(); ++i2) {
177 for (int i4 = 0; i4 != x4.size(); ++i4) {
178 for (int i5 = 0; i5 != x5.size(); ++i5) {
179 odata[i4+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))] += 2.0 * i0data[0] * fdata[i5+x3.size()*(i2)];
180 }
181 }
182 }
183 }
184 if (x3 == x5 && x0 == x4) {
185 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
186 for (int i2 = 0; i2 != x2.size(); ++i2) {
187 for (int i1 = 0; i1 != x1.size(); ++i1) {
188 for (int i5 = 0; i5 != x5.size(); ++i5) {
189 for (int i4 = 0; i4 != x4.size(); ++i4) {
190 odata[i4+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
191 += (-1.0) * i0data[i1+x1.size()*(i2)] * fdata[i5+x3.size()*(i2)];
192 }
193 }
194 }
195 }
196 }
197 // rdm0 merged case
198 if (x1 == x2 && x3 == x4 && x0 == x5) {
199 std::unique_ptr<double[]> i0data = in(0)->get_block();
200 for (int i2 = 0; i2 != x2.size(); ++i2) {
201 for (int i4 = 0; i4 != x4.size(); ++i4) {
202 for (int i5 = 0; i5 != x5.size(); ++i5) {
203 odata[i5+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))] += -4.0 * i0data[0] * fdata[i4+x3.size()*(i2)];
204 }
205 }
206 }
207 }
208 if (x3 == x4 && x0 == x5) {
209 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
210 for (int i2 = 0; i2 != x2.size(); ++i2) {
211 for (int i1 = 0; i1 != x1.size(); ++i1) {
212 for (int i4 = 0; i4 != x4.size(); ++i4) {
213 for (int i5 = 0; i5 != x5.size(); ++i5) {
214 odata[i5+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
215 += (2.0) * i0data[i1+x1.size()*(i2)] * fdata[i4+x3.size()*(i2)];
216 }
217 }
218 }
219 }
220 }
221 if (x1 == x2 && x3 == x4) {
222 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x5);
223 for (int i5 = 0; i5 != x5.size(); ++i5) {
224 for (int i0 = 0; i0 != x0.size(); ++i0) {
225 for (int i2 = 0; i2 != x2.size(); ++i2) {
226 for (int i4 = 0; i4 != x4.size(); ++i4) {
227 odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
228 += (2.0) * i0data[i0+x0.size()*(i5)] * fdata[i4+x3.size()*(i2)];
229 }
230 }
231 }
232 }
233 }
234 if (x3 == x5 && x1 == x2) {
235 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x4);
236 for (int i4 = 0; i4 != x4.size(); ++i4) {
237 for (int i0 = 0; i0 != x0.size(); ++i0) {
238 for (int i5 = 0; i5 != x5.size(); ++i5) {
239 for (int i2 = 0; i2 != x2.size(); ++i2) {
240 odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
241 += (-1.0) * i0data[i0+x0.size()*(i4)] * fdata[i5+x3.size()*(i2)];
242 }
243 }
244 }
245 }
246 }
247 if (x3 == x5 && x1 == x4) {
248 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
249 for (int i2 = 0; i2 != x2.size(); ++i2) {
250 for (int i0 = 0; i0 != x0.size(); ++i0) {
251 for (int i5 = 0; i5 != x5.size(); ++i5) {
252 for (int i4 = 0; i4 != x4.size(); ++i4) {
253 odata[i0+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))]
254 += (2.0) * i0data[i0+x0.size()*(i2)] * fdata[i5+x3.size()*(i2)];
255 }
256 }
257 }
258 }
259 }
260 if (x3 == x4 && x1 == x5) {
261 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
262 for (int i2 = 0; i2 != x2.size(); ++i2) {
263 for (int i0 = 0; i0 != x0.size(); ++i0) {
264 for (int i4 = 0; i4 != x4.size(); ++i4) {
265 for (int i5 = 0; i5 != x5.size(); ++i5) {
266 odata[i0+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))]
267 += (-1.0) * i0data[i0+x0.size()*(i2)] * fdata[i4+x3.size()*(i2)];
268 }
269 }
270 }
271 }
272 }
273 if (x3 == x4) {
274 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x5, x1, x2);
275 for (int i2 = 0; i2 != x2.size(); ++i2) {
276 for (int i1 = 0; i1 != x1.size(); ++i1) {
277 for (int i5 = 0; i5 != x5.size(); ++i5) {
278 for (int i0 = 0; i0 != x0.size(); ++i0) {
279 for (int i4 = 0; i4 != x4.size(); ++i4) {
280 odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
281 += (-1.0) * i0data[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i2)))] * fdata[i4+x3.size()*(i2)];
282 }
283 }
284 }
285 }
286 }
287 }
288 if (x3 == x5) {
289 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x0, x2);
290 for (int i2 = 0; i2 != x2.size(); ++i2) {
291 for (int i0 = 0; i0 != x0.size(); ++i0) {
292 for (int i4 = 0; i4 != x4.size(); ++i4) {
293 for (int i1 = 0; i1 != x1.size(); ++i1) {
294 for (int i5 = 0; i5 != x5.size(); ++i5) {
295 odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
296 += (-1.0) * i0data[i1+x1.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i5+x3.size()*(i2)];
297 }
298 }
299 }
300 }
301 }
302 }
303 out()->add_block(odata, x0, x5, x1, x4);
304 }
305
compute()306 void Task103::Task_local::compute() {
307 const Index x6 = b(0);
308 const Index x1 = b(1);
309 const Index x7 = b(2);
310 const Index x0 = b(3);
311 const Index x2 = b(4);
312 const Index x3 = b(5);
313 const Index x4 = b(6);
314 const Index x5 = b(7);
315 // tensor label: Gamma549
316 std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x7, x1, x6)]);
317 std::fill_n(odata.get(), out()->get_size(x0, x7, x1, x6), 0.0);
318 // associated with merged
319 std::unique_ptr<double[]> fdata = in(5)->get_block(x5, x4, x3, x2);
320 if (x0 == x2 && x3 == x7 && x1 == x6) {
321 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4);
322 for (int i4 = 0; i4 != x4.size(); ++i4) {
323 for (int i5 = 0; i5 != x5.size(); ++i5) {
324 for (int i2 = 0; i2 != x2.size(); ++i2) {
325 for (int i7 = 0; i7 != x7.size(); ++i7) {
326 for (int i6 = 0; i6 != x6.size(); ++i6) {
327 odata[i2+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
328 += (-4.0) * i0data[i5+x5.size()*(i4)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
329 }
330 }
331 }
332 }
333 }
334 }
335 if (x3 == x6 && x1 == x7 && x0 == x2) {
336 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4);
337 for (int i4 = 0; i4 != x4.size(); ++i4) {
338 for (int i5 = 0; i5 != x5.size(); ++i5) {
339 for (int i6 = 0; i6 != x6.size(); ++i6) {
340 for (int i7 = 0; i7 != x7.size(); ++i7) {
341 for (int i2 = 0; i2 != x2.size(); ++i2) {
342 odata[i2+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
343 += (2.0) * i0data[i5+x5.size()*(i4)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
344 }
345 }
346 }
347 }
348 }
349 }
350 if (x3 == x7 && x1 == x6 && x0 == x4) {
351 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2);
352 for (int i2 = 0; i2 != x2.size(); ++i2) {
353 for (int i5 = 0; i5 != x5.size(); ++i5) {
354 for (int i7 = 0; i7 != x7.size(); ++i7) {
355 for (int i6 = 0; i6 != x6.size(); ++i6) {
356 for (int i4 = 0; i4 != x4.size(); ++i4) {
357 odata[i4+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
358 += (2.0) * i0data[i5+x5.size()*(i2)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
359 }
360 }
361 }
362 }
363 }
364 }
365 if (x3 == x6 && x1 == x7 && x0 == x4) {
366 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2);
367 for (int i2 = 0; i2 != x2.size(); ++i2) {
368 for (int i5 = 0; i5 != x5.size(); ++i5) {
369 for (int i6 = 0; i6 != x6.size(); ++i6) {
370 for (int i7 = 0; i7 != x7.size(); ++i7) {
371 for (int i4 = 0; i4 != x4.size(); ++i4) {
372 odata[i4+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
373 += (-1.0) * i0data[i5+x5.size()*(i2)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
374 }
375 }
376 }
377 }
378 }
379 }
380 if (x3 == x7 && x1 == x2 && x0 == x6) {
381 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4);
382 for (int i4 = 0; i4 != x4.size(); ++i4) {
383 for (int i5 = 0; i5 != x5.size(); ++i5) {
384 for (int i7 = 0; i7 != x7.size(); ++i7) {
385 for (int i2 = 0; i2 != x2.size(); ++i2) {
386 for (int i6 = 0; i6 != x6.size(); ++i6) {
387 odata[i6+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
388 += (2.0) * i0data[i5+x5.size()*(i4)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
389 }
390 }
391 }
392 }
393 }
394 }
395 if (x3 == x7 && x1 == x4 && x0 == x6) {
396 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2);
397 for (int i2 = 0; i2 != x2.size(); ++i2) {
398 for (int i5 = 0; i5 != x5.size(); ++i5) {
399 for (int i7 = 0; i7 != x7.size(); ++i7) {
400 for (int i4 = 0; i4 != x4.size(); ++i4) {
401 for (int i6 = 0; i6 != x6.size(); ++i6) {
402 odata[i6+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
403 += (-1.0) * i0data[i5+x5.size()*(i2)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
404 }
405 }
406 }
407 }
408 }
409 }
410 if (x3 == x7 && x0 == x6) {
411 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x1, x2);
412 for (int i2 = 0; i2 != x2.size(); ++i2) {
413 for (int i1 = 0; i1 != x1.size(); ++i1) {
414 for (int i4 = 0; i4 != x4.size(); ++i4) {
415 for (int i5 = 0; i5 != x5.size(); ++i5) {
416 for (int i7 = 0; i7 != x7.size(); ++i7) {
417 for (int i6 = 0; i6 != x6.size(); ++i6) {
418 odata[i6+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
419 += (-1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
420 }
421 }
422 }
423 }
424 }
425 }
426 }
427 if (x3 == x6 && x1 == x2 && x0 == x7) {
428 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4);
429 for (int i4 = 0; i4 != x4.size(); ++i4) {
430 for (int i5 = 0; i5 != x5.size(); ++i5) {
431 for (int i6 = 0; i6 != x6.size(); ++i6) {
432 for (int i2 = 0; i2 != x2.size(); ++i2) {
433 for (int i7 = 0; i7 != x7.size(); ++i7) {
434 odata[i7+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
435 += (-4.0) * i0data[i5+x5.size()*(i4)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
436 }
437 }
438 }
439 }
440 }
441 }
442 if (x3 == x6 && x1 == x4 && x0 == x7) {
443 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2);
444 for (int i2 = 0; i2 != x2.size(); ++i2) {
445 for (int i5 = 0; i5 != x5.size(); ++i5) {
446 for (int i6 = 0; i6 != x6.size(); ++i6) {
447 for (int i4 = 0; i4 != x4.size(); ++i4) {
448 for (int i7 = 0; i7 != x7.size(); ++i7) {
449 odata[i7+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
450 += (2.0) * i0data[i5+x5.size()*(i2)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
451 }
452 }
453 }
454 }
455 }
456 }
457 if (x3 == x6 && x0 == x7) {
458 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x1, x2);
459 for (int i2 = 0; i2 != x2.size(); ++i2) {
460 for (int i1 = 0; i1 != x1.size(); ++i1) {
461 for (int i4 = 0; i4 != x4.size(); ++i4) {
462 for (int i5 = 0; i5 != x5.size(); ++i5) {
463 for (int i6 = 0; i6 != x6.size(); ++i6) {
464 for (int i7 = 0; i7 != x7.size(); ++i7) {
465 odata[i7+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
466 += (2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
467 }
468 }
469 }
470 }
471 }
472 }
473 }
474 if (x3 == x7 && x1 == x6) {
475 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x0, x2);
476 for (int i2 = 0; i2 != x2.size(); ++i2) {
477 for (int i0 = 0; i0 != x0.size(); ++i0) {
478 for (int i4 = 0; i4 != x4.size(); ++i4) {
479 for (int i5 = 0; i5 != x5.size(); ++i5) {
480 for (int i7 = 0; i7 != x7.size(); ++i7) {
481 for (int i6 = 0; i6 != x6.size(); ++i6) {
482 odata[i0+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
483 += (2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
484 }
485 }
486 }
487 }
488 }
489 }
490 }
491 if (x3 == x6 && x1 == x7) {
492 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x0, x2);
493 for (int i2 = 0; i2 != x2.size(); ++i2) {
494 for (int i0 = 0; i0 != x0.size(); ++i0) {
495 for (int i4 = 0; i4 != x4.size(); ++i4) {
496 for (int i5 = 0; i5 != x5.size(); ++i5) {
497 for (int i6 = 0; i6 != x6.size(); ++i6) {
498 for (int i7 = 0; i7 != x7.size(); ++i7) {
499 odata[i0+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
500 += (-1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
501 }
502 }
503 }
504 }
505 }
506 }
507 }
508 // rdm0 merged case
509 if (x3 == x6 && x0 == x2 && x1 == x4 && x5 == x7) {
510 std::unique_ptr<double[]> i0data = in(0)->get_block();
511 for (int i6 = 0; i6 != x6.size(); ++i6) {
512 for (int i2 = 0; i2 != x2.size(); ++i2) {
513 for (int i4 = 0; i4 != x4.size(); ++i4) {
514 for (int i7 = 0; i7 != x7.size(); ++i7) {
515 odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))] += 2.0 * i0data[0] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
516 }
517 }
518 }
519 }
520 }
521 if (x1 == x4 && x0 == x2 && x3 == x6) {
522 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x7);
523 for (int i7 = 0; i7 != x7.size(); ++i7) {
524 for (int i5 = 0; i5 != x5.size(); ++i5) {
525 for (int i4 = 0; i4 != x4.size(); ++i4) {
526 for (int i2 = 0; i2 != x2.size(); ++i2) {
527 for (int i6 = 0; i6 != x6.size(); ++i6) {
528 odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
529 += (-1.0) * i0data[i5+x5.size()*(i7)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
530 }
531 }
532 }
533 }
534 }
535 }
536 // rdm0 merged case
537 if (x1 == x4 && x0 == x2 && x5 == x6 && x3 == x7) {
538 std::unique_ptr<double[]> i0data = in(0)->get_block();
539 for (int i4 = 0; i4 != x4.size(); ++i4) {
540 for (int i2 = 0; i2 != x2.size(); ++i2) {
541 for (int i6 = 0; i6 != x6.size(); ++i6) {
542 for (int i7 = 0; i7 != x7.size(); ++i7) {
543 odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))] += -4.0 * i0data[0] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
544 }
545 }
546 }
547 }
548 }
549 if (x1 == x4 && x0 == x2 && x3 == x7) {
550 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x6);
551 for (int i6 = 0; i6 != x6.size(); ++i6) {
552 for (int i5 = 0; i5 != x5.size(); ++i5) {
553 for (int i4 = 0; i4 != x4.size(); ++i4) {
554 for (int i2 = 0; i2 != x2.size(); ++i2) {
555 for (int i7 = 0; i7 != x7.size(); ++i7) {
556 odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
557 += (2.0) * i0data[i5+x5.size()*(i6)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
558 }
559 }
560 }
561 }
562 }
563 }
564 if (x1 == x4 && x5 == x6 && x0 == x2) {
565 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x7);
566 for (int i7 = 0; i7 != x7.size(); ++i7) {
567 for (int i3 = 0; i3 != x3.size(); ++i3) {
568 for (int i4 = 0; i4 != x4.size(); ++i4) {
569 for (int i6 = 0; i6 != x6.size(); ++i6) {
570 for (int i2 = 0; i2 != x2.size(); ++i2) {
571 odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
572 += (2.0) * i0data[i3+x3.size()*(i7)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
573 }
574 }
575 }
576 }
577 }
578 }
579 if (x5 == x7 && x0 == x2 && x1 == x4) {
580 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x6);
581 for (int i6 = 0; i6 != x6.size(); ++i6) {
582 for (int i3 = 0; i3 != x3.size(); ++i3) {
583 for (int i7 = 0; i7 != x7.size(); ++i7) {
584 for (int i2 = 0; i2 != x2.size(); ++i2) {
585 for (int i4 = 0; i4 != x4.size(); ++i4) {
586 odata[i2+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
587 += (-1.0) * i0data[i3+x3.size()*(i6)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
588 }
589 }
590 }
591 }
592 }
593 }
594 // rdm0 merged case
595 if (x3 == x4 && x5 == x7 && x1 == x6 && x0 == x2) {
596 std::unique_ptr<double[]> i0data = in(0)->get_block();
597 for (int i4 = 0; i4 != x4.size(); ++i4) {
598 for (int i7 = 0; i7 != x7.size(); ++i7) {
599 for (int i6 = 0; i6 != x6.size(); ++i6) {
600 for (int i2 = 0; i2 != x2.size(); ++i2) {
601 odata[i2+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))] += -4.0 * i0data[0] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
602 }
603 }
604 }
605 }
606 }
607 if (x1 == x6 && x5 == x7 && x0 == x2) {
608 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
609 for (int i4 = 0; i4 != x4.size(); ++i4) {
610 for (int i3 = 0; i3 != x3.size(); ++i3) {
611 for (int i6 = 0; i6 != x6.size(); ++i6) {
612 for (int i7 = 0; i7 != x7.size(); ++i7) {
613 for (int i2 = 0; i2 != x2.size(); ++i2) {
614 odata[i2+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
615 += (2.0) * i0data[i3+x3.size()*(i4)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
616 }
617 }
618 }
619 }
620 }
621 }
622 // rdm0 merged case
623 if (x5 == x6 && x3 == x4 && x1 == x7 && x0 == x2) {
624 std::unique_ptr<double[]> i0data = in(0)->get_block();
625 for (int i6 = 0; i6 != x6.size(); ++i6) {
626 for (int i4 = 0; i4 != x4.size(); ++i4) {
627 for (int i7 = 0; i7 != x7.size(); ++i7) {
628 for (int i2 = 0; i2 != x2.size(); ++i2) {
629 odata[i2+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))] += 2.0 * i0data[0] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
630 }
631 }
632 }
633 }
634 }
635 if (x0 == x2 && x5 == x6 && x1 == x7) {
636 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
637 for (int i4 = 0; i4 != x4.size(); ++i4) {
638 for (int i3 = 0; i3 != x3.size(); ++i3) {
639 for (int i2 = 0; i2 != x2.size(); ++i2) {
640 for (int i6 = 0; i6 != x6.size(); ++i6) {
641 for (int i7 = 0; i7 != x7.size(); ++i7) {
642 odata[i2+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
643 += (-1.0) * i0data[i3+x3.size()*(i4)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
644 }
645 }
646 }
647 }
648 }
649 }
650 if (x5 == x6 && x3 == x4 && x0 == x2) {
651 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x7);
652 for (int i7 = 0; i7 != x7.size(); ++i7) {
653 for (int i1 = 0; i1 != x1.size(); ++i1) {
654 for (int i6 = 0; i6 != x6.size(); ++i6) {
655 for (int i4 = 0; i4 != x4.size(); ++i4) {
656 for (int i2 = 0; i2 != x2.size(); ++i2) {
657 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
658 += (-1.0) * i0data[i1+x1.size()*(i7)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
659 }
660 }
661 }
662 }
663 }
664 }
665 if (x5 == x7 && x3 == x4 && x0 == x2) {
666 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x6);
667 for (int i6 = 0; i6 != x6.size(); ++i6) {
668 for (int i1 = 0; i1 != x1.size(); ++i1) {
669 for (int i7 = 0; i7 != x7.size(); ++i7) {
670 for (int i4 = 0; i4 != x4.size(); ++i4) {
671 for (int i2 = 0; i2 != x2.size(); ++i2) {
672 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
673 += (2.0) * i0data[i1+x1.size()*(i6)] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
674 }
675 }
676 }
677 }
678 }
679 }
680 if (x5 == x7 && x3 == x6 && x0 == x2) {
681 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x4);
682 for (int i4 = 0; i4 != x4.size(); ++i4) {
683 for (int i1 = 0; i1 != x1.size(); ++i1) {
684 for (int i7 = 0; i7 != x7.size(); ++i7) {
685 for (int i6 = 0; i6 != x6.size(); ++i6) {
686 for (int i2 = 0; i2 != x2.size(); ++i2) {
687 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
688 += (-1.0) * i0data[i1+x1.size()*(i4)] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
689 }
690 }
691 }
692 }
693 }
694 }
695 if (x3 == x6 && x0 == x2) {
696 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x7, x5, x4);
697 for (int i4 = 0; i4 != x4.size(); ++i4) {
698 for (int i5 = 0; i5 != x5.size(); ++i5) {
699 for (int i7 = 0; i7 != x7.size(); ++i7) {
700 for (int i1 = 0; i1 != x1.size(); ++i1) {
701 for (int i6 = 0; i6 != x6.size(); ++i6) {
702 for (int i2 = 0; i2 != x2.size(); ++i2) {
703 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
704 += (-1.0) * i0data[i1+x1.size()*(i7+x7.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
705 }
706 }
707 }
708 }
709 }
710 }
711 }
712 if (x3 == x7 && x0 == x2 && x5 == x6) {
713 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x4);
714 for (int i4 = 0; i4 != x4.size(); ++i4) {
715 for (int i1 = 0; i1 != x1.size(); ++i1) {
716 for (int i7 = 0; i7 != x7.size(); ++i7) {
717 for (int i2 = 0; i2 != x2.size(); ++i2) {
718 for (int i6 = 0; i6 != x6.size(); ++i6) {
719 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
720 += (2.0) * i0data[i1+x1.size()*(i4)] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
721 }
722 }
723 }
724 }
725 }
726 }
727 if (x3 == x7 && x0 == x2) {
728 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x5, x4);
729 for (int i4 = 0; i4 != x4.size(); ++i4) {
730 for (int i5 = 0; i5 != x5.size(); ++i5) {
731 for (int i6 = 0; i6 != x6.size(); ++i6) {
732 for (int i1 = 0; i1 != x1.size(); ++i1) {
733 for (int i7 = 0; i7 != x7.size(); ++i7) {
734 for (int i2 = 0; i2 != x2.size(); ++i2) {
735 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
736 += (2.0) * i0data[i1+x1.size()*(i6+x6.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
737 }
738 }
739 }
740 }
741 }
742 }
743 }
744 if (x5 == x6 && x0 == x2) {
745 std::unique_ptr<double[]> i0data = in(2)->get_block(x3, x7, x1, x4);
746 for (int i4 = 0; i4 != x4.size(); ++i4) {
747 for (int i1 = 0; i1 != x1.size(); ++i1) {
748 for (int i7 = 0; i7 != x7.size(); ++i7) {
749 for (int i3 = 0; i3 != x3.size(); ++i3) {
750 for (int i6 = 0; i6 != x6.size(); ++i6) {
751 for (int i2 = 0; i2 != x2.size(); ++i2) {
752 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
753 += (-1.0) * i0data[i3+x3.size()*(i7+x7.size()*(i1+x1.size()*(i4)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
754 }
755 }
756 }
757 }
758 }
759 }
760 }
761 if (x5 == x7 && x0 == x2) {
762 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x3, x4);
763 for (int i4 = 0; i4 != x4.size(); ++i4) {
764 for (int i3 = 0; i3 != x3.size(); ++i3) {
765 for (int i6 = 0; i6 != x6.size(); ++i6) {
766 for (int i1 = 0; i1 != x1.size(); ++i1) {
767 for (int i7 = 0; i7 != x7.size(); ++i7) {
768 for (int i2 = 0; i2 != x2.size(); ++i2) {
769 odata[i2+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
770 += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i3+x3.size()*(i4)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
771 }
772 }
773 }
774 }
775 }
776 }
777 }
778 // rdm0 merged case
779 if (x5 == x7 && x3 == x6 && x1 == x2 && x0 == x4) {
780 std::unique_ptr<double[]> i0data = in(0)->get_block();
781 for (int i7 = 0; i7 != x7.size(); ++i7) {
782 for (int i6 = 0; i6 != x6.size(); ++i6) {
783 for (int i2 = 0; i2 != x2.size(); ++i2) {
784 for (int i4 = 0; i4 != x4.size(); ++i4) {
785 odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))] += -4.0 * i0data[0] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
786 }
787 }
788 }
789 }
790 }
791 if (x3 == x6 && x1 == x2 && x0 == x4) {
792 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x7);
793 for (int i7 = 0; i7 != x7.size(); ++i7) {
794 for (int i5 = 0; i5 != x5.size(); ++i5) {
795 for (int i6 = 0; i6 != x6.size(); ++i6) {
796 for (int i2 = 0; i2 != x2.size(); ++i2) {
797 for (int i4 = 0; i4 != x4.size(); ++i4) {
798 odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
799 += (2.0) * i0data[i5+x5.size()*(i7)] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
800 }
801 }
802 }
803 }
804 }
805 }
806 // rdm0 merged case
807 if (x5 == x6 && x0 == x4 && x3 == x7 && x1 == x2) {
808 std::unique_ptr<double[]> i0data = in(0)->get_block();
809 for (int i6 = 0; i6 != x6.size(); ++i6) {
810 for (int i4 = 0; i4 != x4.size(); ++i4) {
811 for (int i7 = 0; i7 != x7.size(); ++i7) {
812 for (int i2 = 0; i2 != x2.size(); ++i2) {
813 odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))] += 2.0 * i0data[0] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
814 }
815 }
816 }
817 }
818 }
819 if (x0 == x4 && x3 == x7 && x1 == x2) {
820 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x6);
821 for (int i6 = 0; i6 != x6.size(); ++i6) {
822 for (int i5 = 0; i5 != x5.size(); ++i5) {
823 for (int i4 = 0; i4 != x4.size(); ++i4) {
824 for (int i7 = 0; i7 != x7.size(); ++i7) {
825 for (int i2 = 0; i2 != x2.size(); ++i2) {
826 odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
827 += (-1.0) * i0data[i5+x5.size()*(i6)] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
828 }
829 }
830 }
831 }
832 }
833 }
834 if (x5 == x6 && x1 == x2 && x0 == x4) {
835 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x7);
836 for (int i7 = 0; i7 != x7.size(); ++i7) {
837 for (int i3 = 0; i3 != x3.size(); ++i3) {
838 for (int i6 = 0; i6 != x6.size(); ++i6) {
839 for (int i2 = 0; i2 != x2.size(); ++i2) {
840 for (int i4 = 0; i4 != x4.size(); ++i4) {
841 odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
842 += (-1.0) * i0data[i3+x3.size()*(i7)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
843 }
844 }
845 }
846 }
847 }
848 }
849 if (x5 == x7 && x1 == x2 && x0 == x4) {
850 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x6);
851 for (int i6 = 0; i6 != x6.size(); ++i6) {
852 for (int i3 = 0; i3 != x3.size(); ++i3) {
853 for (int i7 = 0; i7 != x7.size(); ++i7) {
854 for (int i2 = 0; i2 != x2.size(); ++i2) {
855 for (int i4 = 0; i4 != x4.size(); ++i4) {
856 odata[i4+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
857 += (2.0) * i0data[i3+x3.size()*(i6)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
858 }
859 }
860 }
861 }
862 }
863 }
864 if (x5 == x7 && x1 == x6 && x0 == x4) {
865 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
866 for (int i2 = 0; i2 != x2.size(); ++i2) {
867 for (int i3 = 0; i3 != x3.size(); ++i3) {
868 for (int i7 = 0; i7 != x7.size(); ++i7) {
869 for (int i6 = 0; i6 != x6.size(); ++i6) {
870 for (int i4 = 0; i4 != x4.size(); ++i4) {
871 odata[i4+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
872 += (-4.0) * i0data[i3+x3.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
873 }
874 }
875 }
876 }
877 }
878 }
879 if (x5 == x6 && x1 == x7 && x0 == x4) {
880 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
881 for (int i2 = 0; i2 != x2.size(); ++i2) {
882 for (int i3 = 0; i3 != x3.size(); ++i3) {
883 for (int i6 = 0; i6 != x6.size(); ++i6) {
884 for (int i7 = 0; i7 != x7.size(); ++i7) {
885 for (int i4 = 0; i4 != x4.size(); ++i4) {
886 odata[i4+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
887 += (2.0) * i0data[i3+x3.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
888 }
889 }
890 }
891 }
892 }
893 }
894 if (x5 == x7 && x3 == x6 && x0 == x4) {
895 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
896 for (int i2 = 0; i2 != x2.size(); ++i2) {
897 for (int i1 = 0; i1 != x1.size(); ++i1) {
898 for (int i7 = 0; i7 != x7.size(); ++i7) {
899 for (int i6 = 0; i6 != x6.size(); ++i6) {
900 for (int i4 = 0; i4 != x4.size(); ++i4) {
901 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
902 += (2.0) * i0data[i1+x1.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
903 }
904 }
905 }
906 }
907 }
908 }
909 if (x3 == x6 && x0 == x4) {
910 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x7, x1, x2);
911 for (int i2 = 0; i2 != x2.size(); ++i2) {
912 for (int i1 = 0; i1 != x1.size(); ++i1) {
913 for (int i7 = 0; i7 != x7.size(); ++i7) {
914 for (int i5 = 0; i5 != x5.size(); ++i5) {
915 for (int i6 = 0; i6 != x6.size(); ++i6) {
916 for (int i4 = 0; i4 != x4.size(); ++i4) {
917 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
918 += (-1.0) * i0data[i5+x5.size()*(i7+x7.size()*(i1+x1.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
919 }
920 }
921 }
922 }
923 }
924 }
925 }
926 if (x5 == x6 && x3 == x7 && x0 == x4) {
927 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
928 for (int i2 = 0; i2 != x2.size(); ++i2) {
929 for (int i1 = 0; i1 != x1.size(); ++i1) {
930 for (int i6 = 0; i6 != x6.size(); ++i6) {
931 for (int i7 = 0; i7 != x7.size(); ++i7) {
932 for (int i4 = 0; i4 != x4.size(); ++i4) {
933 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
934 += (-1.0) * i0data[i1+x1.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
935 }
936 }
937 }
938 }
939 }
940 }
941 if (x3 == x7 && x0 == x4) {
942 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x5, x2);
943 for (int i2 = 0; i2 != x2.size(); ++i2) {
944 for (int i5 = 0; i5 != x5.size(); ++i5) {
945 for (int i6 = 0; i6 != x6.size(); ++i6) {
946 for (int i1 = 0; i1 != x1.size(); ++i1) {
947 for (int i7 = 0; i7 != x7.size(); ++i7) {
948 for (int i4 = 0; i4 != x4.size(); ++i4) {
949 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
950 += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i5+x5.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
951 }
952 }
953 }
954 }
955 }
956 }
957 }
958 if (x5 == x6 && x0 == x4) {
959 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x7, x3, x2);
960 for (int i2 = 0; i2 != x2.size(); ++i2) {
961 for (int i3 = 0; i3 != x3.size(); ++i3) {
962 for (int i7 = 0; i7 != x7.size(); ++i7) {
963 for (int i1 = 0; i1 != x1.size(); ++i1) {
964 for (int i6 = 0; i6 != x6.size(); ++i6) {
965 for (int i4 = 0; i4 != x4.size(); ++i4) {
966 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
967 += (-1.0) * i0data[i1+x1.size()*(i7+x7.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
968 }
969 }
970 }
971 }
972 }
973 }
974 }
975 if (x5 == x7 && x0 == x4) {
976 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x3, x2);
977 for (int i2 = 0; i2 != x2.size(); ++i2) {
978 for (int i3 = 0; i3 != x3.size(); ++i3) {
979 for (int i6 = 0; i6 != x6.size(); ++i6) {
980 for (int i1 = 0; i1 != x1.size(); ++i1) {
981 for (int i7 = 0; i7 != x7.size(); ++i7) {
982 for (int i4 = 0; i4 != x4.size(); ++i4) {
983 odata[i4+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
984 += (2.0) * i0data[i1+x1.size()*(i6+x6.size()*(i3+x3.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
985 }
986 }
987 }
988 }
989 }
990 }
991 }
992 // rdm0 merged case
993 if (x5 == x7 && x3 == x4 && x1 == x2 && x0 == x6) {
994 std::unique_ptr<double[]> i0data = in(0)->get_block();
995 for (int i7 = 0; i7 != x7.size(); ++i7) {
996 for (int i4 = 0; i4 != x4.size(); ++i4) {
997 for (int i2 = 0; i2 != x2.size(); ++i2) {
998 for (int i6 = 0; i6 != x6.size(); ++i6) {
999 odata[i6+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))] += 2.0 * i0data[0] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1000 }
1001 }
1002 }
1003 }
1004 }
1005 if (x5 == x7 && x1 == x2 && x0 == x6) {
1006 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
1007 for (int i4 = 0; i4 != x4.size(); ++i4) {
1008 for (int i3 = 0; i3 != x3.size(); ++i3) {
1009 for (int i7 = 0; i7 != x7.size(); ++i7) {
1010 for (int i2 = 0; i2 != x2.size(); ++i2) {
1011 for (int i6 = 0; i6 != x6.size(); ++i6) {
1012 odata[i6+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1013 += (-1.0) * i0data[i3+x3.size()*(i4)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1014 }
1015 }
1016 }
1017 }
1018 }
1019 }
1020 if (x5 == x7 && x1 == x4 && x0 == x6) {
1021 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
1022 for (int i2 = 0; i2 != x2.size(); ++i2) {
1023 for (int i3 = 0; i3 != x3.size(); ++i3) {
1024 for (int i7 = 0; i7 != x7.size(); ++i7) {
1025 for (int i4 = 0; i4 != x4.size(); ++i4) {
1026 for (int i6 = 0; i6 != x6.size(); ++i6) {
1027 odata[i6+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
1028 += (2.0) * i0data[i3+x3.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1029 }
1030 }
1031 }
1032 }
1033 }
1034 }
1035 if (x5 == x7 && x3 == x4 && x0 == x6) {
1036 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
1037 for (int i2 = 0; i2 != x2.size(); ++i2) {
1038 for (int i1 = 0; i1 != x1.size(); ++i1) {
1039 for (int i7 = 0; i7 != x7.size(); ++i7) {
1040 for (int i4 = 0; i4 != x4.size(); ++i4) {
1041 for (int i6 = 0; i6 != x6.size(); ++i6) {
1042 odata[i6+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1043 += (-1.0) * i0data[i1+x1.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1044 }
1045 }
1046 }
1047 }
1048 }
1049 }
1050 if (x5 == x7 && x0 == x6) {
1051 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x3, x2);
1052 for (int i2 = 0; i2 != x2.size(); ++i2) {
1053 for (int i3 = 0; i3 != x3.size(); ++i3) {
1054 for (int i4 = 0; i4 != x4.size(); ++i4) {
1055 for (int i1 = 0; i1 != x1.size(); ++i1) {
1056 for (int i7 = 0; i7 != x7.size(); ++i7) {
1057 for (int i6 = 0; i6 != x6.size(); ++i6) {
1058 odata[i6+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1059 += (-1.0) * i0data[i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1060 }
1061 }
1062 }
1063 }
1064 }
1065 }
1066 }
1067 // rdm0 merged case
1068 if (x5 == x6 && x3 == x4 && x1 == x2 && x0 == x7) {
1069 std::unique_ptr<double[]> i0data = in(0)->get_block();
1070 for (int i6 = 0; i6 != x6.size(); ++i6) {
1071 for (int i4 = 0; i4 != x4.size(); ++i4) {
1072 for (int i2 = 0; i2 != x2.size(); ++i2) {
1073 for (int i7 = 0; i7 != x7.size(); ++i7) {
1074 odata[i7+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))] += -4.0 * i0data[0] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1075 }
1076 }
1077 }
1078 }
1079 }
1080 if (x5 == x6 && x1 == x2 && x0 == x7) {
1081 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
1082 for (int i4 = 0; i4 != x4.size(); ++i4) {
1083 for (int i3 = 0; i3 != x3.size(); ++i3) {
1084 for (int i6 = 0; i6 != x6.size(); ++i6) {
1085 for (int i2 = 0; i2 != x2.size(); ++i2) {
1086 for (int i7 = 0; i7 != x7.size(); ++i7) {
1087 odata[i7+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1088 += (2.0) * i0data[i3+x3.size()*(i4)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1089 }
1090 }
1091 }
1092 }
1093 }
1094 }
1095 if (x5 == x6 && x1 == x4 && x0 == x7) {
1096 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
1097 for (int i2 = 0; i2 != x2.size(); ++i2) {
1098 for (int i3 = 0; i3 != x3.size(); ++i3) {
1099 for (int i6 = 0; i6 != x6.size(); ++i6) {
1100 for (int i4 = 0; i4 != x4.size(); ++i4) {
1101 for (int i7 = 0; i7 != x7.size(); ++i7) {
1102 odata[i7+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
1103 += (-4.0) * i0data[i3+x3.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1104 }
1105 }
1106 }
1107 }
1108 }
1109 }
1110 if (x5 == x6 && x3 == x4 && x0 == x7) {
1111 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
1112 for (int i2 = 0; i2 != x2.size(); ++i2) {
1113 for (int i1 = 0; i1 != x1.size(); ++i1) {
1114 for (int i6 = 0; i6 != x6.size(); ++i6) {
1115 for (int i4 = 0; i4 != x4.size(); ++i4) {
1116 for (int i7 = 0; i7 != x7.size(); ++i7) {
1117 odata[i7+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1118 += (2.0) * i0data[i1+x1.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1119 }
1120 }
1121 }
1122 }
1123 }
1124 }
1125 if (x5 == x6 && x0 == x7) {
1126 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x3, x2);
1127 for (int i2 = 0; i2 != x2.size(); ++i2) {
1128 for (int i3 = 0; i3 != x3.size(); ++i3) {
1129 for (int i4 = 0; i4 != x4.size(); ++i4) {
1130 for (int i1 = 0; i1 != x1.size(); ++i1) {
1131 for (int i6 = 0; i6 != x6.size(); ++i6) {
1132 for (int i7 = 0; i7 != x7.size(); ++i7) {
1133 odata[i7+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1134 += (2.0) * i0data[i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1135 }
1136 }
1137 }
1138 }
1139 }
1140 }
1141 }
1142 if (x5 == x6 && x3 == x4 && x1 == x2) {
1143 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x7);
1144 for (int i7 = 0; i7 != x7.size(); ++i7) {
1145 for (int i0 = 0; i0 != x0.size(); ++i0) {
1146 for (int i6 = 0; i6 != x6.size(); ++i6) {
1147 for (int i4 = 0; i4 != x4.size(); ++i4) {
1148 for (int i2 = 0; i2 != x2.size(); ++i2) {
1149 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1150 += (2.0) * i0data[i0+x0.size()*(i7)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1151 }
1152 }
1153 }
1154 }
1155 }
1156 }
1157 if (x5 == x7 && x3 == x4 && x1 == x2) {
1158 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x6);
1159 for (int i6 = 0; i6 != x6.size(); ++i6) {
1160 for (int i0 = 0; i0 != x0.size(); ++i0) {
1161 for (int i7 = 0; i7 != x7.size(); ++i7) {
1162 for (int i4 = 0; i4 != x4.size(); ++i4) {
1163 for (int i2 = 0; i2 != x2.size(); ++i2) {
1164 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1165 += (-1.0) * i0data[i0+x0.size()*(i6)] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1166 }
1167 }
1168 }
1169 }
1170 }
1171 }
1172 if (x5 == x7 && x3 == x6 && x1 == x2) {
1173 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x4);
1174 for (int i4 = 0; i4 != x4.size(); ++i4) {
1175 for (int i0 = 0; i0 != x0.size(); ++i0) {
1176 for (int i7 = 0; i7 != x7.size(); ++i7) {
1177 for (int i6 = 0; i6 != x6.size(); ++i6) {
1178 for (int i2 = 0; i2 != x2.size(); ++i2) {
1179 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1180 += (2.0) * i0data[i0+x0.size()*(i4)] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
1181 }
1182 }
1183 }
1184 }
1185 }
1186 }
1187 if (x3 == x6 && x1 == x2) {
1188 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x5, x4);
1189 for (int i4 = 0; i4 != x4.size(); ++i4) {
1190 for (int i5 = 0; i5 != x5.size(); ++i5) {
1191 for (int i7 = 0; i7 != x7.size(); ++i7) {
1192 for (int i0 = 0; i0 != x0.size(); ++i0) {
1193 for (int i6 = 0; i6 != x6.size(); ++i6) {
1194 for (int i2 = 0; i2 != x2.size(); ++i2) {
1195 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1196 += (2.0) * i0data[i0+x0.size()*(i7+x7.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
1197 }
1198 }
1199 }
1200 }
1201 }
1202 }
1203 }
1204 if (x5 == x6 && x3 == x7 && x1 == x2) {
1205 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x4);
1206 for (int i4 = 0; i4 != x4.size(); ++i4) {
1207 for (int i0 = 0; i0 != x0.size(); ++i0) {
1208 for (int i6 = 0; i6 != x6.size(); ++i6) {
1209 for (int i7 = 0; i7 != x7.size(); ++i7) {
1210 for (int i2 = 0; i2 != x2.size(); ++i2) {
1211 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1212 += (-1.0) * i0data[i0+x0.size()*(i4)] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
1213 }
1214 }
1215 }
1216 }
1217 }
1218 }
1219 if (x3 == x7 && x1 == x2) {
1220 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x6, x5, x4);
1221 for (int i4 = 0; i4 != x4.size(); ++i4) {
1222 for (int i5 = 0; i5 != x5.size(); ++i5) {
1223 for (int i6 = 0; i6 != x6.size(); ++i6) {
1224 for (int i0 = 0; i0 != x0.size(); ++i0) {
1225 for (int i7 = 0; i7 != x7.size(); ++i7) {
1226 for (int i2 = 0; i2 != x2.size(); ++i2) {
1227 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1228 += (-1.0) * i0data[i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i4)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
1229 }
1230 }
1231 }
1232 }
1233 }
1234 }
1235 }
1236 if (x5 == x6 && x1 == x2) {
1237 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x3, x4);
1238 for (int i4 = 0; i4 != x4.size(); ++i4) {
1239 for (int i3 = 0; i3 != x3.size(); ++i3) {
1240 for (int i7 = 0; i7 != x7.size(); ++i7) {
1241 for (int i0 = 0; i0 != x0.size(); ++i0) {
1242 for (int i6 = 0; i6 != x6.size(); ++i6) {
1243 for (int i2 = 0; i2 != x2.size(); ++i2) {
1244 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1245 += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i3+x3.size()*(i4)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1246 }
1247 }
1248 }
1249 }
1250 }
1251 }
1252 }
1253 if (x5 == x7 && x1 == x2) {
1254 std::unique_ptr<double[]> i0data = in(2)->get_block(x3, x6, x0, x4);
1255 for (int i4 = 0; i4 != x4.size(); ++i4) {
1256 for (int i0 = 0; i0 != x0.size(); ++i0) {
1257 for (int i6 = 0; i6 != x6.size(); ++i6) {
1258 for (int i3 = 0; i3 != x3.size(); ++i3) {
1259 for (int i7 = 0; i7 != x7.size(); ++i7) {
1260 for (int i2 = 0; i2 != x2.size(); ++i2) {
1261 odata[i0+x0.size()*(i7+x7.size()*(i2+x1.size()*(i6)))]
1262 += (-1.0) * i0data[i3+x3.size()*(i6+x6.size()*(i0+x0.size()*(i4)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1263 }
1264 }
1265 }
1266 }
1267 }
1268 }
1269 }
1270 if (x5 == x7 && x3 == x6 && x1 == x4) {
1271 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
1272 for (int i2 = 0; i2 != x2.size(); ++i2) {
1273 for (int i0 = 0; i0 != x0.size(); ++i0) {
1274 for (int i7 = 0; i7 != x7.size(); ++i7) {
1275 for (int i6 = 0; i6 != x6.size(); ++i6) {
1276 for (int i4 = 0; i4 != x4.size(); ++i4) {
1277 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
1278 += (-1.0) * i0data[i0+x0.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
1279 }
1280 }
1281 }
1282 }
1283 }
1284 }
1285 if (x3 == x6 && x1 == x4) {
1286 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x5, x2);
1287 for (int i2 = 0; i2 != x2.size(); ++i2) {
1288 for (int i5 = 0; i5 != x5.size(); ++i5) {
1289 for (int i7 = 0; i7 != x7.size(); ++i7) {
1290 for (int i0 = 0; i0 != x0.size(); ++i0) {
1291 for (int i6 = 0; i6 != x6.size(); ++i6) {
1292 for (int i4 = 0; i4 != x4.size(); ++i4) {
1293 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
1294 += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i5+x5.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
1295 }
1296 }
1297 }
1298 }
1299 }
1300 }
1301 }
1302 if (x5 == x6 && x3 == x7 && x1 == x4) {
1303 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
1304 for (int i2 = 0; i2 != x2.size(); ++i2) {
1305 for (int i0 = 0; i0 != x0.size(); ++i0) {
1306 for (int i6 = 0; i6 != x6.size(); ++i6) {
1307 for (int i7 = 0; i7 != x7.size(); ++i7) {
1308 for (int i4 = 0; i4 != x4.size(); ++i4) {
1309 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
1310 += (2.0) * i0data[i0+x0.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
1311 }
1312 }
1313 }
1314 }
1315 }
1316 }
1317 if (x3 == x7 && x1 == x4) {
1318 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x6, x0, x2);
1319 for (int i2 = 0; i2 != x2.size(); ++i2) {
1320 for (int i0 = 0; i0 != x0.size(); ++i0) {
1321 for (int i6 = 0; i6 != x6.size(); ++i6) {
1322 for (int i5 = 0; i5 != x5.size(); ++i5) {
1323 for (int i7 = 0; i7 != x7.size(); ++i7) {
1324 for (int i4 = 0; i4 != x4.size(); ++i4) {
1325 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
1326 += (-1.0) * i0data[i5+x5.size()*(i6+x6.size()*(i0+x0.size()*(i2)))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
1327 }
1328 }
1329 }
1330 }
1331 }
1332 }
1333 }
1334 if (x5 == x6 && x1 == x4) {
1335 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x3, x2);
1336 for (int i2 = 0; i2 != x2.size(); ++i2) {
1337 for (int i3 = 0; i3 != x3.size(); ++i3) {
1338 for (int i7 = 0; i7 != x7.size(); ++i7) {
1339 for (int i0 = 0; i0 != x0.size(); ++i0) {
1340 for (int i6 = 0; i6 != x6.size(); ++i6) {
1341 for (int i4 = 0; i4 != x4.size(); ++i4) {
1342 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
1343 += (2.0) * i0data[i0+x0.size()*(i7+x7.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1344 }
1345 }
1346 }
1347 }
1348 }
1349 }
1350 }
1351 if (x5 == x7 && x1 == x4) {
1352 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x6, x3, x2);
1353 for (int i2 = 0; i2 != x2.size(); ++i2) {
1354 for (int i3 = 0; i3 != x3.size(); ++i3) {
1355 for (int i6 = 0; i6 != x6.size(); ++i6) {
1356 for (int i0 = 0; i0 != x0.size(); ++i0) {
1357 for (int i7 = 0; i7 != x7.size(); ++i7) {
1358 for (int i4 = 0; i4 != x4.size(); ++i4) {
1359 odata[i0+x0.size()*(i7+x7.size()*(i4+x1.size()*(i6)))]
1360 += (-1.0) * i0data[i0+x0.size()*(i6+x6.size()*(i3+x3.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1361 }
1362 }
1363 }
1364 }
1365 }
1366 }
1367 }
1368 if (x5 == x7 && x3 == x4 && x1 == x6) {
1369 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
1370 for (int i2 = 0; i2 != x2.size(); ++i2) {
1371 for (int i0 = 0; i0 != x0.size(); ++i0) {
1372 for (int i7 = 0; i7 != x7.size(); ++i7) {
1373 for (int i4 = 0; i4 != x4.size(); ++i4) {
1374 for (int i6 = 0; i6 != x6.size(); ++i6) {
1375 odata[i0+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
1376 += (2.0) * i0data[i0+x0.size()*(i2)] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1377 }
1378 }
1379 }
1380 }
1381 }
1382 }
1383 if (x5 == x7 && x1 == x6) {
1384 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x4, x3, x2);
1385 for (int i2 = 0; i2 != x2.size(); ++i2) {
1386 for (int i3 = 0; i3 != x3.size(); ++i3) {
1387 for (int i4 = 0; i4 != x4.size(); ++i4) {
1388 for (int i0 = 0; i0 != x0.size(); ++i0) {
1389 for (int i7 = 0; i7 != x7.size(); ++i7) {
1390 for (int i6 = 0; i6 != x6.size(); ++i6) {
1391 odata[i0+x0.size()*(i7+x7.size()*(i6+x1.size()*(i6)))]
1392 += (2.0) * i0data[i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1393 }
1394 }
1395 }
1396 }
1397 }
1398 }
1399 }
1400 if (x5 == x6 && x3 == x4 && x1 == x7) {
1401 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
1402 for (int i2 = 0; i2 != x2.size(); ++i2) {
1403 for (int i0 = 0; i0 != x0.size(); ++i0) {
1404 for (int i6 = 0; i6 != x6.size(); ++i6) {
1405 for (int i4 = 0; i4 != x4.size(); ++i4) {
1406 for (int i7 = 0; i7 != x7.size(); ++i7) {
1407 odata[i0+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
1408 += (-1.0) * i0data[i0+x0.size()*(i2)] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1409 }
1410 }
1411 }
1412 }
1413 }
1414 }
1415 if (x5 == x6 && x1 == x7) {
1416 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x4, x3, x2);
1417 for (int i2 = 0; i2 != x2.size(); ++i2) {
1418 for (int i3 = 0; i3 != x3.size(); ++i3) {
1419 for (int i4 = 0; i4 != x4.size(); ++i4) {
1420 for (int i0 = 0; i0 != x0.size(); ++i0) {
1421 for (int i6 = 0; i6 != x6.size(); ++i6) {
1422 for (int i7 = 0; i7 != x7.size(); ++i7) {
1423 odata[i0+x0.size()*(i7+x7.size()*(i7+x1.size()*(i6)))]
1424 += (-1.0) * i0data[i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1425 }
1426 }
1427 }
1428 }
1429 }
1430 }
1431 }
1432 if (x5 == x6 && x3 == x4) {
1433 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x7, x1, x2);
1434 for (int i2 = 0; i2 != x2.size(); ++i2) {
1435 for (int i1 = 0; i1 != x1.size(); ++i1) {
1436 for (int i7 = 0; i7 != x7.size(); ++i7) {
1437 for (int i0 = 0; i0 != x0.size(); ++i0) {
1438 for (int i6 = 0; i6 != x6.size(); ++i6) {
1439 for (int i4 = 0; i4 != x4.size(); ++i4) {
1440 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1441 += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1442 }
1443 }
1444 }
1445 }
1446 }
1447 }
1448 }
1449 if (x5 == x7 && x3 == x4) {
1450 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x6, x0, x2);
1451 for (int i2 = 0; i2 != x2.size(); ++i2) {
1452 for (int i0 = 0; i0 != x0.size(); ++i0) {
1453 for (int i6 = 0; i6 != x6.size(); ++i6) {
1454 for (int i1 = 0; i1 != x1.size(); ++i1) {
1455 for (int i7 = 0; i7 != x7.size(); ++i7) {
1456 for (int i4 = 0; i4 != x4.size(); ++i4) {
1457 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1458 += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i0+x0.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1459 }
1460 }
1461 }
1462 }
1463 }
1464 }
1465 }
1466 if (x5 == x7 && x3 == x6) {
1467 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x4, x1, x2);
1468 for (int i2 = 0; i2 != x2.size(); ++i2) {
1469 for (int i1 = 0; i1 != x1.size(); ++i1) {
1470 for (int i4 = 0; i4 != x4.size(); ++i4) {
1471 for (int i0 = 0; i0 != x0.size(); ++i0) {
1472 for (int i7 = 0; i7 != x7.size(); ++i7) {
1473 for (int i6 = 0; i6 != x6.size(); ++i6) {
1474 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1475 += (-1.0) * i0data[i0+x0.size()*(i4+x4.size()*(i1+x1.size()*(i2)))] * fdata[i7+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
1476 }
1477 }
1478 }
1479 }
1480 }
1481 }
1482 }
1483 if (x3 == x6) {
1484 std::unique_ptr<double[]> i0data = in(3)->get_block(x0, x7, x5, x4, x1, x2);
1485 for (int i2 = 0; i2 != x2.size(); ++i2) {
1486 for (int i1 = 0; i1 != x1.size(); ++i1) {
1487 for (int i4 = 0; i4 != x4.size(); ++i4) {
1488 for (int i5 = 0; i5 != x5.size(); ++i5) {
1489 for (int i7 = 0; i7 != x7.size(); ++i7) {
1490 for (int i0 = 0; i0 != x0.size(); ++i0) {
1491 for (int i6 = 0; i6 != x6.size(); ++i6) {
1492 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1493 += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i6+x3.size()*(i2)))];
1494 }
1495 }
1496 }
1497 }
1498 }
1499 }
1500 }
1501 }
1502 if (x5 == x6 && x3 == x7) {
1503 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x0, x2);
1504 for (int i2 = 0; i2 != x2.size(); ++i2) {
1505 for (int i0 = 0; i0 != x0.size(); ++i0) {
1506 for (int i4 = 0; i4 != x4.size(); ++i4) {
1507 for (int i1 = 0; i1 != x1.size(); ++i1) {
1508 for (int i6 = 0; i6 != x6.size(); ++i6) {
1509 for (int i7 = 0; i7 != x7.size(); ++i7) {
1510 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1511 += (-1.0) * i0data[i1+x1.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i6+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
1512 }
1513 }
1514 }
1515 }
1516 }
1517 }
1518 }
1519 if (x3 == x7) {
1520 std::unique_ptr<double[]> i0data = in(3)->get_block(x1, x6, x5, x4, x0, x2);
1521 for (int i2 = 0; i2 != x2.size(); ++i2) {
1522 for (int i0 = 0; i0 != x0.size(); ++i0) {
1523 for (int i4 = 0; i4 != x4.size(); ++i4) {
1524 for (int i5 = 0; i5 != x5.size(); ++i5) {
1525 for (int i6 = 0; i6 != x6.size(); ++i6) {
1526 for (int i1 = 0; i1 != x1.size(); ++i1) {
1527 for (int i7 = 0; i7 != x7.size(); ++i7) {
1528 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1529 += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i7+x3.size()*(i2)))];
1530 }
1531 }
1532 }
1533 }
1534 }
1535 }
1536 }
1537 }
1538 if (x5 == x6) {
1539 std::unique_ptr<double[]> i0data = in(3)->get_block(x0, x7, x1, x4, x3, x2);
1540 for (int i2 = 0; i2 != x2.size(); ++i2) {
1541 for (int i3 = 0; i3 != x3.size(); ++i3) {
1542 for (int i4 = 0; i4 != x4.size(); ++i4) {
1543 for (int i1 = 0; i1 != x1.size(); ++i1) {
1544 for (int i7 = 0; i7 != x7.size(); ++i7) {
1545 for (int i0 = 0; i0 != x0.size(); ++i0) {
1546 for (int i6 = 0; i6 != x6.size(); ++i6) {
1547 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1548 += (-1.0) * i0data[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))] * fdata[i6+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1549 }
1550 }
1551 }
1552 }
1553 }
1554 }
1555 }
1556 }
1557 if (x5 == x7) {
1558 std::unique_ptr<double[]> i0data = in(3)->get_block(x1, x6, x0, x4, x3, x2);
1559 for (int i2 = 0; i2 != x2.size(); ++i2) {
1560 for (int i3 = 0; i3 != x3.size(); ++i3) {
1561 for (int i4 = 0; i4 != x4.size(); ++i4) {
1562 for (int i0 = 0; i0 != x0.size(); ++i0) {
1563 for (int i6 = 0; i6 != x6.size(); ++i6) {
1564 for (int i1 = 0; i1 != x1.size(); ++i1) {
1565 for (int i7 = 0; i7 != x7.size(); ++i7) {
1566 odata[i0+x0.size()*(i7+x7.size()*(i1+x1.size()*(i6)))]
1567 += (-1.0) * i0data[i1+x1.size()*(i6+x6.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))] * fdata[i7+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1568 }
1569 }
1570 }
1571 }
1572 }
1573 }
1574 }
1575 }
1576 out()->add_block(odata, x0, x7, x1, x6);
1577 }
1578
compute()1579 void Task104::Task_local::compute() {
1580 const Index x0 = b(0);
1581 const Index x1 = b(1);
1582 // scalar
1583 // tensor label: Gamma558
1584 std::unique_ptr<double[]> odata(new double[out()->get_size()]);
1585 std::fill_n(odata.get(), out()->get_size(), 0.0);
1586 // associated with merged
1587 std::unique_ptr<double[]> fdata = in(1)->get_block(x1, x0);
1588 out()->add_block(odata);
1589 }
1590
compute()1591 void Task105::Task_local::compute() {
1592 const Index x0 = b(0);
1593 const Index x1 = b(1);
1594 const Index x2 = b(2);
1595 const Index x3 = b(3);
1596 // scalar
1597 // tensor label: Gamma560
1598 std::unique_ptr<double[]> odata(new double[out()->get_size()]);
1599 std::fill_n(odata.get(), out()->get_size(), 0.0);
1600 // associated with merged
1601 std::unique_ptr<double[]> fdata = in(2)->get_block(x3, x2, x1, x0);
1602 out()->add_block(odata);
1603 }
1604
compute()1605 void Task106::Task_local::compute() {
1606 const Index x1 = b(0);
1607 const Index x4 = b(1);
1608 const Index x0 = b(2);
1609 const Index x5 = b(3);
1610 const Index x2 = b(4);
1611 const Index x3 = b(5);
1612 // tensor label: Gamma566
1613 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x1)]);
1614 std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x1), 0.0);
1615 // associated with merged
1616 std::unique_ptr<double[]> fdata = in(2)->get_block(x3, x2);
1617 if (x4 == x2) {
1618 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x1, x5, x0);
1619 for (int i0 = 0; i0 != x0.size(); ++i0) {
1620 for (int i5 = 0; i5 != x5.size(); ++i5) {
1621 for (int i1 = 0; i1 != x1.size(); ++i1) {
1622 for (int i3 = 0; i3 != x3.size(); ++i3) {
1623 for (int i2 = 0; i2 != x2.size(); ++i2) {
1624 odata[i5+x5.size()*(i0+x0.size()*(i2+x4.size()*(i1)))]
1625 += (1.0) * i0data[i3+x3.size()*(i1+x1.size()*(i5+x5.size()*(i0)))] * fdata[i3+x3.size()*(i2)];
1626 }
1627 }
1628 }
1629 }
1630 }
1631 }
1632 if (x5 == x2) {
1633 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0, x4, x1);
1634 for (int i1 = 0; i1 != x1.size(); ++i1) {
1635 for (int i4 = 0; i4 != x4.size(); ++i4) {
1636 for (int i0 = 0; i0 != x0.size(); ++i0) {
1637 for (int i3 = 0; i3 != x3.size(); ++i3) {
1638 for (int i2 = 0; i2 != x2.size(); ++i2) {
1639 odata[i2+x5.size()*(i0+x0.size()*(i4+x4.size()*(i1)))]
1640 += (1.0) * i0data[i3+x3.size()*(i0+x0.size()*(i4+x4.size()*(i1)))] * fdata[i3+x3.size()*(i2)];
1641 }
1642 }
1643 }
1644 }
1645 }
1646 }
1647 out()->add_block(odata, x5, x0, x4, x1);
1648 }
1649
compute()1650 void Task107::Task_local::compute() {
1651 const Index x1 = b(0);
1652 const Index x6 = b(1);
1653 const Index x0 = b(2);
1654 const Index x7 = b(3);
1655 const Index x2 = b(4);
1656 const Index x3 = b(5);
1657 const Index x4 = b(6);
1658 const Index x5 = b(7);
1659 // tensor label: Gamma567
1660 std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x0, x6, x1)]);
1661 std::fill_n(odata.get(), out()->get_size(x7, x0, x6, x1), 0.0);
1662 // associated with merged
1663 std::unique_ptr<double[]> fdata = in(3)->get_block(x5, x4, x3, x2);
1664 if (x7 == x4 && x6 == x2) {
1665 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x3, x1);
1666 for (int i1 = 0; i1 != x1.size(); ++i1) {
1667 for (int i3 = 0; i3 != x3.size(); ++i3) {
1668 for (int i0 = 0; i0 != x0.size(); ++i0) {
1669 for (int i5 = 0; i5 != x5.size(); ++i5) {
1670 for (int i4 = 0; i4 != x4.size(); ++i4) {
1671 for (int i2 = 0; i2 != x2.size(); ++i2) {
1672 odata[i4+x7.size()*(i0+x0.size()*(i2+x6.size()*(i1)))]
1673 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i1)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1674 }
1675 }
1676 }
1677 }
1678 }
1679 }
1680 }
1681 if (x7 == x2 && x6 == x4) {
1682 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x1, x3, x0);
1683 for (int i0 = 0; i0 != x0.size(); ++i0) {
1684 for (int i3 = 0; i3 != x3.size(); ++i3) {
1685 for (int i1 = 0; i1 != x1.size(); ++i1) {
1686 for (int i5 = 0; i5 != x5.size(); ++i5) {
1687 for (int i2 = 0; i2 != x2.size(); ++i2) {
1688 for (int i4 = 0; i4 != x4.size(); ++i4) {
1689 odata[i2+x7.size()*(i0+x0.size()*(i4+x6.size()*(i1)))]
1690 += (1.0) * i0data[i5+x5.size()*(i1+x1.size()*(i3+x3.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1691 }
1692 }
1693 }
1694 }
1695 }
1696 }
1697 }
1698 if (x6 == x4) {
1699 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x1, x3, x2, x7, x0);
1700 for (int i0 = 0; i0 != x0.size(); ++i0) {
1701 for (int i7 = 0; i7 != x7.size(); ++i7) {
1702 for (int i2 = 0; i2 != x2.size(); ++i2) {
1703 for (int i3 = 0; i3 != x3.size(); ++i3) {
1704 for (int i1 = 0; i1 != x1.size(); ++i1) {
1705 for (int i5 = 0; i5 != x5.size(); ++i5) {
1706 for (int i4 = 0; i4 != x4.size(); ++i4) {
1707 odata[i7+x7.size()*(i0+x0.size()*(i4+x6.size()*(i1)))]
1708 += (1.0) * i0data[i5+x5.size()*(i1+x1.size()*(i3+x3.size()*(i2+x2.size()*(i7+x7.size()*(i0)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1709 }
1710 }
1711 }
1712 }
1713 }
1714 }
1715 }
1716 }
1717 if (x7 == x4) {
1718 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x2, x6, x1);
1719 for (int i1 = 0; i1 != x1.size(); ++i1) {
1720 for (int i6 = 0; i6 != x6.size(); ++i6) {
1721 for (int i2 = 0; i2 != x2.size(); ++i2) {
1722 for (int i3 = 0; i3 != x3.size(); ++i3) {
1723 for (int i0 = 0; i0 != x0.size(); ++i0) {
1724 for (int i5 = 0; i5 != x5.size(); ++i5) {
1725 for (int i4 = 0; i4 != x4.size(); ++i4) {
1726 odata[i4+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))]
1727 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2+x2.size()*(i6+x6.size()*(i1)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1728 }
1729 }
1730 }
1731 }
1732 }
1733 }
1734 }
1735 }
1736 if (x3 == x4 && x6 == x2) {
1737 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x1, x7, x0);
1738 for (int i0 = 0; i0 != x0.size(); ++i0) {
1739 for (int i7 = 0; i7 != x7.size(); ++i7) {
1740 for (int i1 = 0; i1 != x1.size(); ++i1) {
1741 for (int i5 = 0; i5 != x5.size(); ++i5) {
1742 for (int i4 = 0; i4 != x4.size(); ++i4) {
1743 for (int i2 = 0; i2 != x2.size(); ++i2) {
1744 odata[i7+x7.size()*(i0+x0.size()*(i2+x6.size()*(i1)))]
1745 += (1.0) * i0data[i5+x5.size()*(i1+x1.size()*(i7+x7.size()*(i0)))] * fdata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1746 }
1747 }
1748 }
1749 }
1750 }
1751 }
1752 }
1753 if (x6 == x2) {
1754 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x1, x7, x0);
1755 for (int i0 = 0; i0 != x0.size(); ++i0) {
1756 for (int i7 = 0; i7 != x7.size(); ++i7) {
1757 for (int i1 = 0; i1 != x1.size(); ++i1) {
1758 for (int i3 = 0; i3 != x3.size(); ++i3) {
1759 for (int i4 = 0; i4 != x4.size(); ++i4) {
1760 for (int i5 = 0; i5 != x5.size(); ++i5) {
1761 for (int i2 = 0; i2 != x2.size(); ++i2) {
1762 odata[i7+x7.size()*(i0+x0.size()*(i2+x6.size()*(i1)))]
1763 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i7+x7.size()*(i0)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1764 }
1765 }
1766 }
1767 }
1768 }
1769 }
1770 }
1771 }
1772 if (x3 == x4 && x7 == x2) {
1773 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x6, x1);
1774 for (int i1 = 0; i1 != x1.size(); ++i1) {
1775 for (int i6 = 0; i6 != x6.size(); ++i6) {
1776 for (int i0 = 0; i0 != x0.size(); ++i0) {
1777 for (int i5 = 0; i5 != x5.size(); ++i5) {
1778 for (int i4 = 0; i4 != x4.size(); ++i4) {
1779 for (int i2 = 0; i2 != x2.size(); ++i2) {
1780 odata[i2+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))]
1781 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i6+x6.size()*(i1)))] * fdata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2)))];
1782 }
1783 }
1784 }
1785 }
1786 }
1787 }
1788 }
1789 if (x7 == x2) {
1790 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x0, x6, x1);
1791 for (int i1 = 0; i1 != x1.size(); ++i1) {
1792 for (int i6 = 0; i6 != x6.size(); ++i6) {
1793 for (int i0 = 0; i0 != x0.size(); ++i0) {
1794 for (int i3 = 0; i3 != x3.size(); ++i3) {
1795 for (int i4 = 0; i4 != x4.size(); ++i4) {
1796 for (int i5 = 0; i5 != x5.size(); ++i5) {
1797 for (int i2 = 0; i2 != x2.size(); ++i2) {
1798 odata[i2+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))]
1799 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0+x0.size()*(i6+x6.size()*(i1)))))] * fdata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
1800 }
1801 }
1802 }
1803 }
1804 }
1805 }
1806 }
1807 }
1808 out()->add_block(odata, x7, x0, x6, x1);
1809 }
1810
compute()1811 void Task109::Task_local::compute() {
1812 const Index c2 = b(0);
1813 const Index x1 = b(1);
1814 const Index c1 = b(2);
1815 const Index x0 = b(3);
1816 // tensor label: r
1817 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x1, c1, x0)]);
1818 std::fill_n(odata.get(), out()->get_size(c2, x1, c1, x0), 0.0);
1819 {
1820 // tensor label: I0
1821 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, c1, x0, x1);
1822 sort_indices<0,3,1,2,1,1,1,1>(i0data, odata, c2.size(), c1.size(), x0.size(), x1.size());
1823 }
1824 {
1825 // tensor label: I0
1826 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, c2, x1, x0);
1827 sort_indices<1,2,0,3,1,1,1,1>(i0data, odata, c1.size(), c2.size(), x1.size(), x0.size());
1828 }
1829 out()->add_block(odata, c2, x1, c1, x0);
1830 }
1831
compute()1832 void Task110::Task_local::compute() {
1833 const Index c2 = b(0);
1834 const Index c1 = b(1);
1835 const Index x0 = b(2);
1836 const Index x1 = b(3);
1837 // tensor label: I0
1838 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
1839 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
1840 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
1841 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
1842 for (auto& x3 : *range_[1]) {
1843 for (auto& x2 : *range_[1]) {
1844 // tensor label: Gamma0
1845 std::unique_ptr<double[]> i0data = in(0)->get_block(x0, x3, x1, x2);
1846 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x0, x3, x1, x2)]);
1847 sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, x0.size(), x3.size(), x1.size(), x2.size());
1848 // tensor label: I1
1849 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, c1, x3, x2);
1850 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, c1, x3, x2)]);
1851 sort_indices<2,3,0,1,0,1,1,1>(i1data, i1data_sorted, c2.size(), c1.size(), x3.size(), x2.size());
1852 dgemm_("T", "N", x0.size()*x1.size(), c2.size()*c1.size(), x3.size()*x2.size(),
1853 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
1854 1.0, odata_sorted, x0.size()*x1.size());
1855 }
1856 }
1857 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c2.size(), c1.size());
1858 out()->add_block(odata, c2, c1, x0, x1);
1859 }
1860
compute()1861 void Task111::Task_local::compute() {
1862 const Index c2 = b(0);
1863 const Index c1 = b(1);
1864 const Index x3 = b(2);
1865 const Index x2 = b(3);
1866 // tensor label: I1
1867 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x3, x2)]);
1868 std::fill_n(odata.get(), out()->get_size(c2, c1, x3, x2), 0.0);
1869 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x3, x2)]);
1870 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x3, x2), 0.0);
1871 for (auto& c3 : *range_[0]) {
1872 // tensor label: t2
1873 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x3, c3, x2);
1874 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, x3, c3, x2)]);
1875 sort_indices<2,0,1,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), x3.size(), c3.size(), x2.size());
1876 // tensor label: h1
1877 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, c3);
1878 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, c3)]);
1879 sort_indices<1,0,0,1,-2,1>(i1data, i1data_sorted, c2.size(), c3.size());
1880 dgemm_("T", "N", c1.size()*x3.size()*x2.size(), c2.size(), c3.size(),
1881 1.0, i0data_sorted, c3.size(), i1data_sorted, c3.size(),
1882 1.0, odata_sorted, c1.size()*x3.size()*x2.size());
1883 }
1884 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), x3.size(), x2.size(), c2.size());
1885 out()->add_block(odata, c2, c1, x3, x2);
1886 }
1887
compute()1888 void Task112::Task_local::compute() {
1889 const Index c2 = b(0);
1890 const Index c1 = b(1);
1891 const Index x3 = b(2);
1892 const Index x2 = b(3);
1893 // tensor label: I1
1894 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x3, x2)]);
1895 std::fill_n(odata.get(), out()->get_size(c2, c1, x3, x2), 0.0);
1896 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x3, x2)]);
1897 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x3, x2), 0.0);
1898 for (auto& c3 : *range_[0]) {
1899 for (auto& a4 : *range_[2]) {
1900 // tensor label: t2
1901 std::unique_ptr<double[]> i0data = in(0)->get_block(c3, a4, c1, x3);
1902 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c3, a4, c1, x3)]);
1903 sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, c3.size(), a4.size(), c1.size(), x3.size());
1904 // tensor label: I280
1905 std::unique_ptr<double[]> i1data = in(1)->get_block(a4, x2, c2, c3);
1906 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(a4, x2, c2, c3)]);
1907 sort_indices<3,0,1,2,0,1,1,1>(i1data, i1data_sorted, a4.size(), x2.size(), c2.size(), c3.size());
1908 dgemm_("T", "N", c1.size()*x3.size(), x2.size()*c2.size(), a4.size()*c3.size(),
1909 1.0, i0data_sorted, a4.size()*c3.size(), i1data_sorted, a4.size()*c3.size(),
1910 1.0, odata_sorted, c1.size()*x3.size());
1911 }
1912 }
1913 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), x3.size(), x2.size(), c2.size());
1914 out()->add_block(odata, c2, c1, x3, x2);
1915 }
1916
compute()1917 void Task113::Task_local::compute() {
1918 const Index a4 = b(0);
1919 const Index x2 = b(1);
1920 const Index c2 = b(2);
1921 const Index c3 = b(3);
1922 // tensor label: I280
1923 std::unique_ptr<double[]> odata(new double[out()->get_size(a4, x2, c2, c3)]);
1924 std::fill_n(odata.get(), out()->get_size(a4, x2, c2, c3), 0.0);
1925 {
1926 // tensor label: v2
1927 std::unique_ptr<double[]> i0data = in(0)->get_block(a4, x2, c2, c3);
1928 sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, a4.size(), x2.size(), c2.size(), c3.size());
1929 }
1930 {
1931 // tensor label: v2
1932 std::unique_ptr<double[]> i1data = in(0)->get_block(c2, x2, a4, c3);
1933 sort_indices<2,1,0,3,1,1,2,1>(i1data, odata, c2.size(), x2.size(), a4.size(), c3.size());
1934 }
1935 out()->add_block(odata, a4, x2, c2, c3);
1936 }
1937
compute()1938 void Task114::Task_local::compute() {
1939 const Index c2 = b(0);
1940 const Index c1 = b(1);
1941 const Index x3 = b(2);
1942 const Index x2 = b(3);
1943 // tensor label: I1
1944 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x3, x2)]);
1945 std::fill_n(odata.get(), out()->get_size(c2, c1, x3, x2), 0.0);
1946 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x3, x2)]);
1947 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x3, x2), 0.0);
1948 for (auto& a4 : *range_[2]) {
1949 for (auto& c3 : *range_[0]) {
1950 // tensor label: t2
1951 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, a4, c3, x3);
1952 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, a4, c3, x3)]);
1953 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), a4.size(), c3.size(), x3.size());
1954 // tensor label: v2
1955 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x2, a4, c3);
1956 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x2, a4, c3)]);
1957 sort_indices<2,3,0,1,0,1,-1,1>(i1data, i1data_sorted, c2.size(), x2.size(), a4.size(), c3.size());
1958 dgemm_("T", "N", c1.size()*x3.size(), c2.size()*x2.size(), a4.size()*c3.size(),
1959 1.0, i0data_sorted, a4.size()*c3.size(), i1data_sorted, a4.size()*c3.size(),
1960 1.0, odata_sorted, c1.size()*x3.size());
1961 }
1962 }
1963 sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, c1.size(), x3.size(), c2.size(), x2.size());
1964 out()->add_block(odata, c2, c1, x3, x2);
1965 }
1966
compute()1967 void Task115::Task_local::compute() {
1968 const Index c2 = b(0);
1969 const Index c1 = b(1);
1970 const Index x0 = b(2);
1971 const Index x1 = b(3);
1972 // tensor label: I0
1973 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
1974 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
1975 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
1976 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
1977 for (auto& x2 : *range_[1]) {
1978 // tensor label: h1
1979 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, x2);
1980 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c2, x2)]);
1981 sort_indices<1,0,0,1,1,1>(i0data, i0data_sorted, c2.size(), x2.size());
1982 // tensor label: I4
1983 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x0, x1, x2);
1984 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x0, x1, x2)]);
1985 sort_indices<3,0,1,2,0,1,1,1>(i1data, i1data_sorted, c1.size(), x0.size(), x1.size(), x2.size());
1986 dgemm_("T", "N", c2.size(), c1.size()*x0.size()*x1.size(), x2.size(),
1987 1.0, i0data_sorted, x2.size(), i1data_sorted, x2.size(),
1988 1.0, odata_sorted, c2.size());
1989 }
1990 sort_indices<0,1,2,3,1,1,1,1>(odata_sorted, odata, c2.size(), c1.size(), x0.size(), x1.size());
1991 out()->add_block(odata, c2, c1, x0, x1);
1992 }
1993
compute()1994 void Task116::Task_local::compute() {
1995 const Index c1 = b(0);
1996 const Index x0 = b(1);
1997 const Index x1 = b(2);
1998 const Index x2 = b(3);
1999 // tensor label: I4
2000 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, x2)]);
2001 std::fill_n(odata.get(), out()->get_size(c1, x0, x1, x2), 0.0);
2002 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, x2)]);
2003 std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, x2), 0.0);
2004 for (auto& x5 : *range_[1]) {
2005 for (auto& x4 : *range_[1]) {
2006 for (auto& x3 : *range_[1]) {
2007 // tensor label: Gamma1
2008 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4, x0, x3, x1, x2);
2009 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, x4, x0, x3, x1, x2)]);
2010 sort_indices<0,1,3,2,4,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x4.size(), x0.size(), x3.size(), x1.size(), x2.size());
2011 // tensor label: t2
2012 std::unique_ptr<double[]> i1data = in(1)->get_block(x5, x4, c1, x3);
2013 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x5, x4, c1, x3)]);
2014 sort_indices<0,1,3,2,0,1,1,1>(i1data, i1data_sorted, x5.size(), x4.size(), c1.size(), x3.size());
2015 dgemm_("T", "N", x0.size()*x1.size()*x2.size(), c1.size(), x5.size()*x4.size()*x3.size(),
2016 1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
2017 1.0, odata_sorted, x0.size()*x1.size()*x2.size());
2018 }
2019 }
2020 }
2021 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), x2.size(), c1.size());
2022 out()->add_block(odata, c1, x0, x1, x2);
2023 }
2024
compute()2025 void Task117::Task_local::compute() {
2026 const Index c2 = b(0);
2027 const Index c1 = b(1);
2028 const Index x0 = b(2);
2029 const Index x1 = b(3);
2030 // tensor label: I0
2031 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2032 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2033 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2034 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2035 for (auto& x3 : *range_[1]) {
2036 for (auto& x2 : *range_[1]) {
2037 // tensor label: Gamma2
2038 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x3, x0, x2);
2039 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x1, x3, x0, x2)]);
2040 sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, x1.size(), x3.size(), x0.size(), x2.size());
2041 // tensor label: I7
2042 std::unique_ptr<double[]> i1data = in(1)->get_block(x2, c1, c2, x3);
2043 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x2, c1, c2, x3)]);
2044 sort_indices<3,0,1,2,0,1,1,1>(i1data, i1data_sorted, x2.size(), c1.size(), c2.size(), x3.size());
2045 dgemm_("T", "N", x1.size()*x0.size(), c1.size()*c2.size(), x2.size()*x3.size(),
2046 1.0, i0data_sorted, x2.size()*x3.size(), i1data_sorted, x2.size()*x3.size(),
2047 1.0, odata_sorted, x1.size()*x0.size());
2048 }
2049 }
2050 sort_indices<3,2,1,0,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), c1.size(), c2.size());
2051 out()->add_block(odata, c2, c1, x0, x1);
2052 }
2053
compute()2054 void Task118::Task_local::compute() {
2055 const Index x2 = b(0);
2056 const Index c1 = b(1);
2057 const Index c2 = b(2);
2058 const Index x3 = b(3);
2059 // tensor label: I7
2060 std::unique_ptr<double[]> odata(new double[out()->get_size(x2, c1, c2, x3)]);
2061 std::fill_n(odata.get(), out()->get_size(x2, c1, c2, x3), 0.0);
2062 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(x2, c1, c2, x3)]);
2063 std::fill_n(odata_sorted.get(), out()->get_size(x2, c1, c2, x3), 0.0);
2064 for (auto& a3 : *range_[2]) {
2065 // tensor label: t2
2066 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, a3, c2, x3);
2067 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, a3, c2, x3)]);
2068 sort_indices<1,0,2,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), a3.size(), c2.size(), x3.size());
2069 // tensor label: h1
2070 std::unique_ptr<double[]> i1data = in(1)->get_block(a3, x2);
2071 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(a3, x2)]);
2072 sort_indices<0,1,0,1,-1,1>(i1data, i1data_sorted, a3.size(), x2.size());
2073 dgemm_("T", "N", c1.size()*c2.size()*x3.size(), x2.size(), a3.size(),
2074 1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
2075 1.0, odata_sorted, c1.size()*c2.size()*x3.size());
2076 }
2077 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), c2.size(), x3.size(), x2.size());
2078 out()->add_block(odata, x2, c1, c2, x3);
2079 }
2080
compute()2081 void Task119::Task_local::compute() {
2082 const Index x2 = b(0);
2083 const Index c1 = b(1);
2084 const Index c2 = b(2);
2085 const Index x3 = b(3);
2086 // tensor label: I7
2087 std::unique_ptr<double[]> odata(new double[out()->get_size(x2, c1, c2, x3)]);
2088 std::fill_n(odata.get(), out()->get_size(x2, c1, c2, x3), 0.0);
2089 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(x2, c1, c2, x3)]);
2090 std::fill_n(odata_sorted.get(), out()->get_size(x2, c1, c2, x3), 0.0);
2091 for (auto& a4 : *range_[2]) {
2092 for (auto& c3 : *range_[0]) {
2093 // tensor label: t2
2094 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, a4, c3, x3);
2095 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, a4, c3, x3)]);
2096 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), a4.size(), c3.size(), x3.size());
2097 // tensor label: v2
2098 std::unique_ptr<double[]> i1data = in(1)->get_block(a4, x2, c2, c3);
2099 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(a4, x2, c2, c3)]);
2100 sort_indices<0,3,1,2,0,1,1,1>(i1data, i1data_sorted, a4.size(), x2.size(), c2.size(), c3.size());
2101 dgemm_("T", "N", c1.size()*x3.size(), x2.size()*c2.size(), a4.size()*c3.size(),
2102 1.0, i0data_sorted, a4.size()*c3.size(), i1data_sorted, a4.size()*c3.size(),
2103 1.0, odata_sorted, c1.size()*x3.size());
2104 }
2105 }
2106 sort_indices<2,0,3,1,1,1,1,1>(odata_sorted, odata, c1.size(), x3.size(), x2.size(), c2.size());
2107 out()->add_block(odata, x2, c1, c2, x3);
2108 }
2109
compute()2110 void Task120::Task_local::compute() {
2111 const Index c2 = b(0);
2112 const Index c1 = b(1);
2113 const Index x0 = b(2);
2114 const Index x1 = b(3);
2115 // tensor label: I0
2116 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2117 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2118 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2119 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2120 for (auto& x5 : *range_[1]) {
2121 for (auto& x4 : *range_[1]) {
2122 for (auto& x3 : *range_[1]) {
2123 for (auto& x2 : *range_[1]) {
2124 // tensor label: Gamma80
2125 std::unique_ptr<double[]> i0data = in(0)->get_block(x0, x5, x1, x4, x3, x2);
2126 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x0, x5, x1, x4, x3, x2)]);
2127 sort_indices<1,3,4,5,0,2,0,1,1,1>(i0data, i0data_sorted, x0.size(), x5.size(), x1.size(), x4.size(), x3.size(), x2.size());
2128 // tensor label: I249
2129 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x3, x2, c1, x5, x4);
2130 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x3, x2, c1, x5, x4)]);
2131 sort_indices<4,5,1,2,0,3,0,1,1,1>(i1data, i1data_sorted, c2.size(), x3.size(), x2.size(), c1.size(), x5.size(), x4.size());
2132 dgemm_("T", "N", x0.size()*x1.size(), c2.size()*c1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
2133 1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
2134 1.0, odata_sorted, x0.size()*x1.size());
2135 }
2136 }
2137 }
2138 }
2139 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c2.size(), c1.size());
2140 out()->add_block(odata, c2, c1, x0, x1);
2141 }
2142
compute()2143 void Task121::Task_local::compute() {
2144 const Index c2 = b(0);
2145 const Index x3 = b(1);
2146 const Index x2 = b(2);
2147 const Index c1 = b(3);
2148 const Index x5 = b(4);
2149 const Index x4 = b(5);
2150 // tensor label: I249
2151 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x3, x2, c1, x5, x4)]);
2152 std::fill_n(odata.get(), out()->get_size(c2, x3, x2, c1, x5, x4), 0.0);
2153 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, x3, x2, c1, x5, x4)]);
2154 std::fill_n(odata_sorted.get(), out()->get_size(c2, x3, x2, c1, x5, x4), 0.0);
2155 for (auto& c3 : *range_[0]) {
2156 // tensor label: t2
2157 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x5, c3, x4);
2158 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, x5, c3, x4)]);
2159 sort_indices<2,0,1,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), x5.size(), c3.size(), x4.size());
2160 // tensor label: I250
2161 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, c3, x3, x2);
2162 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, c3, x3, x2)]);
2163 sort_indices<1,0,2,3,0,1,1,1>(i1data, i1data_sorted, c2.size(), c3.size(), x3.size(), x2.size());
2164 dgemm_("T", "N", c1.size()*x5.size()*x4.size(), c2.size()*x3.size()*x2.size(), c3.size(),
2165 1.0, i0data_sorted, c3.size(), i1data_sorted, c3.size(),
2166 1.0, odata_sorted, c1.size()*x5.size()*x4.size());
2167 }
2168 sort_indices<3,4,5,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), x5.size(), x4.size(), c2.size(), x3.size(), x2.size());
2169 out()->add_block(odata, c2, x3, x2, c1, x5, x4);
2170 }
2171
compute()2172 void Task122::Task_local::compute() {
2173 const Index c2 = b(0);
2174 const Index c3 = b(1);
2175 const Index x3 = b(2);
2176 const Index x2 = b(3);
2177 // tensor label: I250
2178 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c3, x3, x2)]);
2179 std::fill_n(odata.get(), out()->get_size(c2, c3, x3, x2), 0.0);
2180 {
2181 // tensor label: v2
2182 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, c3, x3, x2);
2183 sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, c2.size(), c3.size(), x3.size(), x2.size());
2184 }
2185 {
2186 // tensor label: v2
2187 std::unique_ptr<double[]> i1data = in(0)->get_block(x3, x2, c2, c3);
2188 sort_indices<2,3,0,1,1,1,-1,1>(i1data, odata, x3.size(), x2.size(), c2.size(), c3.size());
2189 }
2190 out()->add_block(odata, c2, c3, x3, x2);
2191 }
2192
compute()2193 void Task123::Task_local::compute() {
2194 const Index c2 = b(0);
2195 const Index c1 = b(1);
2196 const Index x0 = b(2);
2197 const Index x1 = b(3);
2198 // tensor label: I0
2199 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2200 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2201 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2202 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2203 for (auto& x5 : *range_[1]) {
2204 for (auto& x2 : *range_[1]) {
2205 for (auto& x4 : *range_[1]) {
2206 for (auto& x3 : *range_[1]) {
2207 // tensor label: Gamma81
2208 std::unique_ptr<double[]> i0data = in(0)->get_block(x0, x5, x2, x4, x1, x3);
2209 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x0, x5, x2, x4, x1, x3)]);
2210 sort_indices<1,2,3,5,0,4,0,1,1,1>(i0data, i0data_sorted, x0.size(), x5.size(), x2.size(), x4.size(), x1.size(), x3.size());
2211 // tensor label: I252
2212 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x3, x2, c1, x5, x4);
2213 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x3, x2, c1, x5, x4)]);
2214 sort_indices<4,2,5,1,0,3,0,1,1,1>(i1data, i1data_sorted, c2.size(), x3.size(), x2.size(), c1.size(), x5.size(), x4.size());
2215 dgemm_("T", "N", x0.size()*x1.size(), c2.size()*c1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
2216 1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
2217 1.0, odata_sorted, x0.size()*x1.size());
2218 }
2219 }
2220 }
2221 }
2222 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c2.size(), c1.size());
2223 out()->add_block(odata, c2, c1, x0, x1);
2224 }
2225
compute()2226 void Task124::Task_local::compute() {
2227 const Index c2 = b(0);
2228 const Index x3 = b(1);
2229 const Index x2 = b(2);
2230 const Index c1 = b(3);
2231 const Index x5 = b(4);
2232 const Index x4 = b(5);
2233 // tensor label: I252
2234 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x3, x2, c1, x5, x4)]);
2235 std::fill_n(odata.get(), out()->get_size(c2, x3, x2, c1, x5, x4), 0.0);
2236 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, x3, x2, c1, x5, x4)]);
2237 std::fill_n(odata_sorted.get(), out()->get_size(c2, x3, x2, c1, x5, x4), 0.0);
2238 for (auto& c3 : *range_[0]) {
2239 // tensor label: t2
2240 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x5, c3, x4);
2241 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, x5, c3, x4)]);
2242 sort_indices<2,0,1,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), x5.size(), c3.size(), x4.size());
2243 // tensor label: v2
2244 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x3, x2, c3);
2245 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x3, x2, c3)]);
2246 sort_indices<3,0,1,2,0,1,-1,1>(i1data, i1data_sorted, c2.size(), x3.size(), x2.size(), c3.size());
2247 dgemm_("T", "N", c1.size()*x5.size()*x4.size(), c2.size()*x3.size()*x2.size(), c3.size(),
2248 1.0, i0data_sorted, c3.size(), i1data_sorted, c3.size(),
2249 1.0, odata_sorted, c1.size()*x5.size()*x4.size());
2250 }
2251 sort_indices<3,4,5,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), x5.size(), x4.size(), c2.size(), x3.size(), x2.size());
2252 out()->add_block(odata, c2, x3, x2, c1, x5, x4);
2253 }
2254
compute()2255 void Task125::Task_local::compute() {
2256 const Index c2 = b(0);
2257 const Index c1 = b(1);
2258 const Index x0 = b(2);
2259 const Index x1 = b(3);
2260 // tensor label: I0
2261 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2262 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2263 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2264 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2265 for (auto& x5 : *range_[1]) {
2266 for (auto& x3 : *range_[1]) {
2267 for (auto& x4 : *range_[1]) {
2268 for (auto& x2 : *range_[1]) {
2269 // tensor label: Gamma82
2270 std::unique_ptr<double[]> i0data = in(0)->get_block(x0, x5, x3, x4, x1, x2);
2271 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x0, x5, x3, x4, x1, x2)]);
2272 sort_indices<1,2,3,5,0,4,0,1,1,1>(i0data, i0data_sorted, x0.size(), x5.size(), x3.size(), x4.size(), x1.size(), x2.size());
2273 // tensor label: I255
2274 std::unique_ptr<double[]> i1data = in(1)->get_block(x3, c2, x2, c1, x5, x4);
2275 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x3, c2, x2, c1, x5, x4)]);
2276 sort_indices<4,0,5,2,1,3,0,1,1,1>(i1data, i1data_sorted, x3.size(), c2.size(), x2.size(), c1.size(), x5.size(), x4.size());
2277 dgemm_("T", "N", x0.size()*x1.size(), c2.size()*c1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
2278 1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
2279 1.0, odata_sorted, x0.size()*x1.size());
2280 }
2281 }
2282 }
2283 }
2284 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c2.size(), c1.size());
2285 out()->add_block(odata, c2, c1, x0, x1);
2286 }
2287
compute()2288 void Task126::Task_local::compute() {
2289 const Index x3 = b(0);
2290 const Index c2 = b(1);
2291 const Index x2 = b(2);
2292 const Index c1 = b(3);
2293 const Index x5 = b(4);
2294 const Index x4 = b(5);
2295 // tensor label: I255
2296 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, c2, x2, c1, x5, x4)]);
2297 std::fill_n(odata.get(), out()->get_size(x3, c2, x2, c1, x5, x4), 0.0);
2298 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(x3, c2, x2, c1, x5, x4)]);
2299 std::fill_n(odata_sorted.get(), out()->get_size(x3, c2, x2, c1, x5, x4), 0.0);
2300 for (auto& c3 : *range_[0]) {
2301 // tensor label: t2
2302 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x5, c3, x4);
2303 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, x5, c3, x4)]);
2304 sort_indices<2,0,1,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), x5.size(), c3.size(), x4.size());
2305 // tensor label: v2
2306 std::unique_ptr<double[]> i1data = in(1)->get_block(x3, c3, c2, x2);
2307 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x3, c3, c2, x2)]);
2308 sort_indices<1,0,2,3,0,1,1,1>(i1data, i1data_sorted, x3.size(), c3.size(), c2.size(), x2.size());
2309 dgemm_("T", "N", c1.size()*x5.size()*x4.size(), x3.size()*c2.size()*x2.size(), c3.size(),
2310 1.0, i0data_sorted, c3.size(), i1data_sorted, c3.size(),
2311 1.0, odata_sorted, c1.size()*x5.size()*x4.size());
2312 }
2313 sort_indices<3,4,5,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), x5.size(), x4.size(), x3.size(), c2.size(), x2.size());
2314 out()->add_block(odata, x3, c2, x2, c1, x5, x4);
2315 }
2316
compute()2317 void Task127::Task_local::compute() {
2318 const Index c2 = b(0);
2319 const Index c1 = b(1);
2320 const Index x0 = b(2);
2321 const Index x1 = b(3);
2322 // tensor label: I0
2323 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2324 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2325 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2326 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2327 for (auto& x7 : *range_[1]) {
2328 for (auto& x6 : *range_[1]) {
2329 for (auto& x5 : *range_[1]) {
2330 // tensor label: t2
2331 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x6, c1, x5);
2332 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x7, x6, c1, x5)]);
2333 sort_indices<0,1,3,2,0,1,1,1>(i0data, i0data_sorted, x7.size(), x6.size(), c1.size(), x5.size());
2334 // tensor label: I264
2335 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x7, x6, x0, x5, x1);
2336 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x7, x6, x0, x5, x1)]);
2337 sort_indices<1,2,4,0,3,5,0,1,1,1>(i1data, i1data_sorted, c2.size(), x7.size(), x6.size(), x0.size(), x5.size(), x1.size());
2338 dgemm_("T", "N", c1.size(), c2.size()*x0.size()*x1.size(), x7.size()*x6.size()*x5.size(),
2339 1.0, i0data_sorted, x7.size()*x6.size()*x5.size(), i1data_sorted, x7.size()*x6.size()*x5.size(),
2340 1.0, odata_sorted, c1.size());
2341 }
2342 }
2343 }
2344 sort_indices<1,0,2,3,1,1,1,1>(odata_sorted, odata, c1.size(), c2.size(), x0.size(), x1.size());
2345 out()->add_block(odata, c2, c1, x0, x1);
2346 }
2347
compute()2348 void Task128::Task_local::compute() {
2349 const Index c2 = b(0);
2350 const Index x7 = b(1);
2351 const Index x6 = b(2);
2352 const Index x0 = b(3);
2353 const Index x5 = b(4);
2354 const Index x1 = b(5);
2355 // tensor label: I264
2356 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x7, x6, x0, x5, x1)]);
2357 std::fill_n(odata.get(), out()->get_size(c2, x7, x6, x0, x5, x1), 0.0);
2358 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, x7, x6, x0, x5, x1)]);
2359 std::fill_n(odata_sorted.get(), out()->get_size(c2, x7, x6, x0, x5, x1), 0.0);
2360 for (auto& x4 : *range_[1]) {
2361 for (auto& x3 : *range_[1]) {
2362 for (auto& x2 : *range_[1]) {
2363 // tensor label: Gamma85
2364 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x6, x0, x5, x1, x4, x3, x2);
2365 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x7, x6, x0, x5, x1, x4, x3, x2)]);
2366 sort_indices<5,6,7,0,1,2,3,4,0,1,1,1>(i0data, i0data_sorted, x7.size(), x6.size(), x0.size(), x5.size(), x1.size(), x4.size(), x3.size(), x2.size());
2367 // tensor label: v2
2368 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x4, x3, x2);
2369 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x4, x3, x2)]);
2370 sort_indices<1,2,3,0,0,1,1,2>(i1data, i1data_sorted, c2.size(), x4.size(), x3.size(), x2.size());
2371 dgemm_("T", "N", x7.size()*x6.size()*x0.size()*x5.size()*x1.size(), c2.size(), x4.size()*x3.size()*x2.size(),
2372 1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
2373 1.0, odata_sorted, x7.size()*x6.size()*x0.size()*x5.size()*x1.size());
2374 }
2375 }
2376 }
2377 sort_indices<5,0,1,2,3,4,1,1,1,1>(odata_sorted, odata, x7.size(), x6.size(), x0.size(), x5.size(), x1.size(), c2.size());
2378 out()->add_block(odata, c2, x7, x6, x0, x5, x1);
2379 }
2380
compute()2381 void Task129::Task_local::compute() {
2382 const Index c2 = b(0);
2383 const Index x7 = b(1);
2384 const Index x6 = b(2);
2385 const Index x0 = b(3);
2386 const Index x5 = b(4);
2387 const Index x1 = b(5);
2388 // tensor label: I264
2389 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x7, x6, x0, x5, x1)]);
2390 std::fill_n(odata.get(), out()->get_size(c2, x7, x6, x0, x5, x1), 0.0);
2391 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, x7, x6, x0, x5, x1)]);
2392 std::fill_n(odata_sorted.get(), out()->get_size(c2, x7, x6, x0, x5, x1), 0.0);
2393 for (auto& x4 : *range_[1]) {
2394 for (auto& x3 : *range_[1]) {
2395 for (auto& x2 : *range_[1]) {
2396 // tensor label: Gamma86
2397 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x6, x0, x5, x4, x3, x1, x2);
2398 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x7, x6, x0, x5, x4, x3, x1, x2)]);
2399 sort_indices<4,5,7,0,1,2,3,6,0,1,1,1>(i0data, i0data_sorted, x7.size(), x6.size(), x0.size(), x5.size(), x4.size(), x3.size(), x1.size(), x2.size());
2400 // tensor label: v2
2401 std::unique_ptr<double[]> i1data = in(1)->get_block(x4, x3, c2, x2);
2402 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x4, x3, c2, x2)]);
2403 sort_indices<0,1,3,2,0,1,1,2>(i1data, i1data_sorted, x4.size(), x3.size(), c2.size(), x2.size());
2404 dgemm_("T", "N", x7.size()*x6.size()*x0.size()*x5.size()*x1.size(), c2.size(), x4.size()*x3.size()*x2.size(),
2405 1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
2406 1.0, odata_sorted, x7.size()*x6.size()*x0.size()*x5.size()*x1.size());
2407 }
2408 }
2409 }
2410 sort_indices<5,0,1,2,3,4,1,1,1,1>(odata_sorted, odata, x7.size(), x6.size(), x0.size(), x5.size(), x1.size(), c2.size());
2411 out()->add_block(odata, c2, x7, x6, x0, x5, x1);
2412 }
2413
compute()2414 void Task130::Task_local::compute() {
2415 const Index c2 = b(0);
2416 const Index c1 = b(1);
2417 const Index x0 = b(2);
2418 const Index x1 = b(3);
2419 // tensor label: I0
2420 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2421 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2422 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2423 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2424 for (auto& x2 : *range_[1]) {
2425 for (auto& c3 : *range_[0]) {
2426 // tensor label: v2
2427 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x2, c2, c3);
2428 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, x2, c2, c3)]);
2429 sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, c1.size(), x2.size(), c2.size(), c3.size());
2430 // tensor label: I270
2431 std::unique_ptr<double[]> i1data = in(1)->get_block(c3, x1, x0, x2);
2432 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c3, x1, x0, x2)]);
2433 sort_indices<3,0,1,2,0,1,1,1>(i1data, i1data_sorted, c3.size(), x1.size(), x0.size(), x2.size());
2434 dgemm_("T", "N", c1.size()*c2.size(), x1.size()*x0.size(), c3.size()*x2.size(),
2435 1.0, i0data_sorted, c3.size()*x2.size(), i1data_sorted, c3.size()*x2.size(),
2436 1.0, odata_sorted, c1.size()*c2.size());
2437 }
2438 }
2439 sort_indices<1,0,3,2,1,1,1,1>(odata_sorted, odata, c1.size(), c2.size(), x1.size(), x0.size());
2440 out()->add_block(odata, c2, c1, x0, x1);
2441 }
2442
compute()2443 void Task131::Task_local::compute() {
2444 const Index c3 = b(0);
2445 const Index x1 = b(1);
2446 const Index x0 = b(2);
2447 const Index x2 = b(3);
2448 // tensor label: I270
2449 std::unique_ptr<double[]> odata(new double[out()->get_size(c3, x1, x0, x2)]);
2450 std::fill_n(odata.get(), out()->get_size(c3, x1, x0, x2), 0.0);
2451 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c3, x1, x0, x2)]);
2452 std::fill_n(odata_sorted.get(), out()->get_size(c3, x1, x0, x2), 0.0);
2453 for (auto& x5 : *range_[1]) {
2454 for (auto& x4 : *range_[1]) {
2455 for (auto& x3 : *range_[1]) {
2456 // tensor label: Gamma87
2457 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4, x1, x3, x0, x2);
2458 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, x4, x1, x3, x0, x2)]);
2459 sort_indices<0,1,3,2,4,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x4.size(), x1.size(), x3.size(), x0.size(), x2.size());
2460 // tensor label: t2
2461 std::unique_ptr<double[]> i1data = in(1)->get_block(x5, x4, c3, x3);
2462 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x5, x4, c3, x3)]);
2463 sort_indices<0,1,3,2,0,1,1,1>(i1data, i1data_sorted, x5.size(), x4.size(), c3.size(), x3.size());
2464 dgemm_("T", "N", x1.size()*x0.size()*x2.size(), c3.size(), x5.size()*x4.size()*x3.size(),
2465 1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
2466 1.0, odata_sorted, x1.size()*x0.size()*x2.size());
2467 }
2468 }
2469 }
2470 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), x2.size(), c3.size());
2471 out()->add_block(odata, c3, x1, x0, x2);
2472 }
2473
compute()2474 void Task132::Task_local::compute() {
2475 const Index c2 = b(0);
2476 const Index c1 = b(1);
2477 const Index x0 = b(2);
2478 const Index x1 = b(3);
2479 // tensor label: I0
2480 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2481 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2482 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2483 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2484 for (auto& a3 : *range_[2]) {
2485 for (auto& x5 : *range_[1]) {
2486 // tensor label: t2
2487 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, a3, c2, x5);
2488 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, a3, c2, x5)]);
2489 sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, c1.size(), a3.size(), c2.size(), x5.size());
2490 // tensor label: I273
2491 std::unique_ptr<double[]> i1data = in(1)->get_block(a3, x1, x5, x0);
2492 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(a3, x1, x5, x0)]);
2493 sort_indices<0,2,1,3,0,1,1,1>(i1data, i1data_sorted, a3.size(), x1.size(), x5.size(), x0.size());
2494 dgemm_("T", "N", c1.size()*c2.size(), x1.size()*x0.size(), a3.size()*x5.size(),
2495 1.0, i0data_sorted, a3.size()*x5.size(), i1data_sorted, a3.size()*x5.size(),
2496 1.0, odata_sorted, c1.size()*c2.size());
2497 }
2498 }
2499 sort_indices<1,0,3,2,1,1,1,1>(odata_sorted, odata, c1.size(), c2.size(), x1.size(), x0.size());
2500 out()->add_block(odata, c2, c1, x0, x1);
2501 }
2502
compute()2503 void Task133::Task_local::compute() {
2504 const Index a3 = b(0);
2505 const Index x1 = b(1);
2506 const Index x5 = b(2);
2507 const Index x0 = b(3);
2508 // tensor label: I273
2509 std::unique_ptr<double[]> odata(new double[out()->get_size(a3, x1, x5, x0)]);
2510 std::fill_n(odata.get(), out()->get_size(a3, x1, x5, x0), 0.0);
2511 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(a3, x1, x5, x0)]);
2512 std::fill_n(odata_sorted.get(), out()->get_size(a3, x1, x5, x0), 0.0);
2513 for (auto& x4 : *range_[1]) {
2514 for (auto& x3 : *range_[1]) {
2515 for (auto& x2 : *range_[1]) {
2516 // tensor label: Gamma88
2517 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x5, x0, x4, x3, x2);
2518 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x1, x5, x0, x4, x3, x2)]);
2519 sort_indices<3,4,5,0,1,2,0,1,1,1>(i0data, i0data_sorted, x1.size(), x5.size(), x0.size(), x4.size(), x3.size(), x2.size());
2520 // tensor label: v2
2521 std::unique_ptr<double[]> i1data = in(1)->get_block(a3, x4, x3, x2);
2522 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(a3, x4, x3, x2)]);
2523 sort_indices<1,2,3,0,0,1,-1,2>(i1data, i1data_sorted, a3.size(), x4.size(), x3.size(), x2.size());
2524 dgemm_("T", "N", x1.size()*x5.size()*x0.size(), a3.size(), x4.size()*x3.size()*x2.size(),
2525 1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
2526 1.0, odata_sorted, x1.size()*x5.size()*x0.size());
2527 }
2528 }
2529 }
2530 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x1.size(), x5.size(), x0.size(), a3.size());
2531 out()->add_block(odata, a3, x1, x5, x0);
2532 }
2533
compute()2534 void Task134::Task_local::compute() {
2535 const Index a3 = b(0);
2536 const Index x1 = b(1);
2537 const Index x5 = b(2);
2538 const Index x0 = b(3);
2539 // tensor label: I273
2540 std::unique_ptr<double[]> odata(new double[out()->get_size(a3, x1, x5, x0)]);
2541 std::fill_n(odata.get(), out()->get_size(a3, x1, x5, x0), 0.0);
2542 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(a3, x1, x5, x0)]);
2543 std::fill_n(odata_sorted.get(), out()->get_size(a3, x1, x5, x0), 0.0);
2544 for (auto& x4 : *range_[1]) {
2545 for (auto& x3 : *range_[1]) {
2546 for (auto& x2 : *range_[1]) {
2547 // tensor label: Gamma89
2548 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x5, x4, x3, x0, x2);
2549 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x1, x5, x4, x3, x0, x2)]);
2550 sort_indices<2,3,5,0,1,4,0,1,1,1>(i0data, i0data_sorted, x1.size(), x5.size(), x4.size(), x3.size(), x0.size(), x2.size());
2551 // tensor label: v2
2552 std::unique_ptr<double[]> i1data = in(1)->get_block(x4, x3, a3, x2);
2553 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x4, x3, a3, x2)]);
2554 sort_indices<0,1,3,2,0,1,-1,2>(i1data, i1data_sorted, x4.size(), x3.size(), a3.size(), x2.size());
2555 dgemm_("T", "N", x1.size()*x5.size()*x0.size(), a3.size(), x4.size()*x3.size()*x2.size(),
2556 1.0, i0data_sorted, x4.size()*x3.size()*x2.size(), i1data_sorted, x4.size()*x3.size()*x2.size(),
2557 1.0, odata_sorted, x1.size()*x5.size()*x0.size());
2558 }
2559 }
2560 }
2561 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x1.size(), x5.size(), x0.size(), a3.size());
2562 out()->add_block(odata, a3, x1, x5, x0);
2563 }
2564
compute()2565 void Task135::Task_local::compute() {
2566 const Index c2 = b(0);
2567 const Index c1 = b(1);
2568 const Index x0 = b(2);
2569 const Index x1 = b(3);
2570 // tensor label: I0
2571 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2572 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2573 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2574 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2575 for (auto& x5 : *range_[1]) {
2576 for (auto& x2 : *range_[1]) {
2577 for (auto& x4 : *range_[1]) {
2578 for (auto& x3 : *range_[1]) {
2579 // tensor label: Gamma94
2580 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x2, x0, x4, x1, x3);
2581 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, x2, x0, x4, x1, x3)]);
2582 sort_indices<0,1,3,5,2,4,0,1,1,1>(i0data, i0data_sorted, x5.size(), x2.size(), x0.size(), x4.size(), x1.size(), x3.size());
2583 // tensor label: I291
2584 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x3, x2, x5, c1, x4);
2585 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x3, x2, x5, c1, x4)]);
2586 sort_indices<3,2,5,1,0,4,0,1,1,1>(i1data, i1data_sorted, c2.size(), x3.size(), x2.size(), x5.size(), c1.size(), x4.size());
2587 dgemm_("T", "N", x0.size()*x1.size(), c2.size()*c1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
2588 1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
2589 1.0, odata_sorted, x0.size()*x1.size());
2590 }
2591 }
2592 }
2593 }
2594 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c2.size(), c1.size());
2595 out()->add_block(odata, c2, c1, x0, x1);
2596 }
2597
compute()2598 void Task136::Task_local::compute() {
2599 const Index c2 = b(0);
2600 const Index x3 = b(1);
2601 const Index x2 = b(2);
2602 const Index x5 = b(3);
2603 const Index c1 = b(4);
2604 const Index x4 = b(5);
2605 // tensor label: I291
2606 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x3, x2, x5, c1, x4)]);
2607 std::fill_n(odata.get(), out()->get_size(c2, x3, x2, x5, c1, x4), 0.0);
2608 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, x3, x2, x5, c1, x4)]);
2609 std::fill_n(odata_sorted.get(), out()->get_size(c2, x3, x2, x5, c1, x4), 0.0);
2610 for (auto& a3 : *range_[2]) {
2611 // tensor label: t2
2612 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, a3, c1, x4);
2613 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, a3, c1, x4)]);
2614 sort_indices<1,0,2,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), a3.size(), c1.size(), x4.size());
2615 // tensor label: v2
2616 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x3, a3, x2);
2617 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x3, a3, x2)]);
2618 sort_indices<2,0,1,3,0,1,1,1>(i1data, i1data_sorted, c2.size(), x3.size(), a3.size(), x2.size());
2619 dgemm_("T", "N", x5.size()*c1.size()*x4.size(), c2.size()*x3.size()*x2.size(), a3.size(),
2620 1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
2621 1.0, odata_sorted, x5.size()*c1.size()*x4.size());
2622 }
2623 sort_indices<3,4,5,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), c1.size(), x4.size(), c2.size(), x3.size(), x2.size());
2624 out()->add_block(odata, c2, x3, x2, x5, c1, x4);
2625 }
2626
compute()2627 void Task137::Task_local::compute() {
2628 const Index c2 = b(0);
2629 const Index c1 = b(1);
2630 const Index x0 = b(2);
2631 const Index x1 = b(3);
2632 // tensor label: I0
2633 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, c1, x0, x1)]);
2634 std::fill_n(odata.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2635 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, c1, x0, x1)]);
2636 std::fill_n(odata_sorted.get(), out()->get_size(c2, c1, x0, x1), 0.0);
2637 for (auto& x5 : *range_[1]) {
2638 for (auto& x4 : *range_[1]) {
2639 for (auto& x3 : *range_[1]) {
2640 for (auto& x2 : *range_[1]) {
2641 // tensor label: Gamma87
2642 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4, x1, x3, x0, x2);
2643 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, x4, x1, x3, x0, x2)]);
2644 sort_indices<0,1,3,5,2,4,0,1,1,1>(i0data, i0data_sorted, x5.size(), x4.size(), x1.size(), x3.size(), x0.size(), x2.size());
2645 // tensor label: I294
2646 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x3, x2, c1, x5, x4);
2647 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x3, x2, c1, x5, x4)]);
2648 sort_indices<4,5,1,2,0,3,0,1,1,1>(i1data, i1data_sorted, c2.size(), x3.size(), x2.size(), c1.size(), x5.size(), x4.size());
2649 dgemm_("T", "N", x1.size()*x0.size(), c2.size()*c1.size(), x3.size()*x2.size()*x5.size()*x4.size(),
2650 1.0, i0data_sorted, x3.size()*x2.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x2.size()*x5.size()*x4.size(),
2651 1.0, odata_sorted, x1.size()*x0.size());
2652 }
2653 }
2654 }
2655 }
2656 sort_indices<2,3,1,0,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), c2.size(), c1.size());
2657 out()->add_block(odata, c2, c1, x0, x1);
2658 }
2659
compute()2660 void Task138::Task_local::compute() {
2661 const Index c2 = b(0);
2662 const Index x3 = b(1);
2663 const Index x2 = b(2);
2664 const Index c1 = b(3);
2665 const Index x5 = b(4);
2666 const Index x4 = b(5);
2667 // tensor label: I294
2668 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x3, x2, c1, x5, x4)]);
2669 std::fill_n(odata.get(), out()->get_size(c2, x3, x2, c1, x5, x4), 0.0);
2670 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c2, x3, x2, c1, x5, x4)]);
2671 std::fill_n(odata_sorted.get(), out()->get_size(c2, x3, x2, c1, x5, x4), 0.0);
2672 for (auto& a3 : *range_[2]) {
2673 // tensor label: t2
2674 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, a3, x5, x4);
2675 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, a3, x5, x4)]);
2676 sort_indices<1,0,2,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), a3.size(), x5.size(), x4.size());
2677 // tensor label: v2
2678 std::unique_ptr<double[]> i1data = in(1)->get_block(c2, x3, a3, x2);
2679 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c2, x3, a3, x2)]);
2680 sort_indices<2,0,1,3,0,1,-1,1>(i1data, i1data_sorted, c2.size(), x3.size(), a3.size(), x2.size());
2681 dgemm_("T", "N", c1.size()*x5.size()*x4.size(), c2.size()*x3.size()*x2.size(), a3.size(),
2682 1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
2683 1.0, odata_sorted, c1.size()*x5.size()*x4.size());
2684 }
2685 sort_indices<3,4,5,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), x5.size(), x4.size(), c2.size(), x3.size(), x2.size());
2686 out()->add_block(odata, c2, x3, x2, c1, x5, x4);
2687 }
2688
compute()2689 void Task139::Task_local::compute() {
2690 const Index c1 = b(0);
2691 const Index x2 = b(1);
2692 const Index x0 = b(2);
2693 const Index x1 = b(3);
2694 // tensor label: r
2695 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x2, x0, x1)]);
2696 std::fill_n(odata.get(), out()->get_size(c1, x2, x0, x1), 0.0);
2697 {
2698 // tensor label: I9
2699 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x2, x1, x0);
2700 sort_indices<0,1,3,2,1,1,1,1>(i0data, odata, c1.size(), x2.size(), x1.size(), x0.size());
2701 }
2702 out()->add_block(odata, c1, x2, x0, x1);
2703 }
2704
compute()2705 void Task140::Task_local::compute() {
2706 const Index c1 = b(0);
2707 const Index x2 = b(1);
2708 const Index x1 = b(2);
2709 const Index x0 = b(3);
2710 // tensor label: I9
2711 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x2, x1, x0)]);
2712 std::fill_n(odata.get(), out()->get_size(c1, x2, x1, x0), 0.0);
2713 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x2, x1, x0)]);
2714 std::fill_n(odata_sorted.get(), out()->get_size(c1, x2, x1, x0), 0.0);
2715 for (auto& x5 : *range_[1]) {
2716 for (auto& x3 : *range_[1]) {
2717 for (auto& x4 : *range_[1]) {
2718 // tensor label: Gamma3
2719 std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x5, x3, x4, x1, x0);
2720 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x2, x5, x3, x4, x1, x0)]);
2721 sort_indices<1,2,3,0,4,5,0,1,1,1>(i0data, i0data_sorted, x2.size(), x5.size(), x3.size(), x4.size(), x1.size(), x0.size());
2722 // tensor label: I10
2723 std::unique_ptr<double[]> i1data = in(1)->get_block(x3, c1, x5, x4);
2724 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x3, c1, x5, x4)]);
2725 sort_indices<2,0,3,1,0,1,1,1>(i1data, i1data_sorted, x3.size(), c1.size(), x5.size(), x4.size());
2726 dgemm_("T", "N", x2.size()*x1.size()*x0.size(), c1.size(), x3.size()*x5.size()*x4.size(),
2727 1.0, i0data_sorted, x3.size()*x5.size()*x4.size(), i1data_sorted, x3.size()*x5.size()*x4.size(),
2728 1.0, odata_sorted, x2.size()*x1.size()*x0.size());
2729 }
2730 }
2731 }
2732 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x2.size(), x1.size(), x0.size(), c1.size());
2733 out()->add_block(odata, c1, x2, x1, x0);
2734 }
2735
compute()2736 void Task141::Task_local::compute() {
2737 const Index x3 = b(0);
2738 const Index c1 = b(1);
2739 const Index x5 = b(2);
2740 const Index x4 = b(3);
2741 // tensor label: I10
2742 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, c1, x5, x4)]);
2743 std::fill_n(odata.get(), out()->get_size(x3, c1, x5, x4), 0.0);
2744 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(x3, c1, x5, x4)]);
2745 std::fill_n(odata_sorted.get(), out()->get_size(x3, c1, x5, x4), 0.0);
2746 for (auto& c2 : *range_[0]) {
2747 // tensor label: t2
2748 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x5, c2, x4);
2749 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, x5, c2, x4)]);
2750 sort_indices<2,0,1,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), x5.size(), c2.size(), x4.size());
2751 // tensor label: h1
2752 std::unique_ptr<double[]> i1data = in(1)->get_block(x3, c2);
2753 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x3, c2)]);
2754 sort_indices<1,0,0,1,2,1>(i1data, i1data_sorted, x3.size(), c2.size());
2755 dgemm_("T", "N", c1.size()*x5.size()*x4.size(), x3.size(), c2.size(),
2756 1.0, i0data_sorted, c2.size(), i1data_sorted, c2.size(),
2757 1.0, odata_sorted, c1.size()*x5.size()*x4.size());
2758 }
2759 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), x5.size(), x4.size(), x3.size());
2760 out()->add_block(odata, x3, c1, x5, x4);
2761 }
2762
compute()2763 void Task142::Task_local::compute() {
2764 const Index x3 = b(0);
2765 const Index c1 = b(1);
2766 const Index x5 = b(2);
2767 const Index x4 = b(3);
2768 // tensor label: I10
2769 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, c1, x5, x4)]);
2770 std::fill_n(odata.get(), out()->get_size(x3, c1, x5, x4), 0.0);
2771 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(x3, c1, x5, x4)]);
2772 std::fill_n(odata_sorted.get(), out()->get_size(x3, c1, x5, x4), 0.0);
2773 for (auto& c2 : *range_[0]) {
2774 for (auto& c3 : *range_[0]) {
2775 // tensor label: t2
2776 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, x5, c3, x4);
2777 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c2, x5, c3, x4)]);
2778 sort_indices<0,2,1,3,0,1,1,1>(i0data, i0data_sorted, c2.size(), x5.size(), c3.size(), x4.size());
2779 // tensor label: v2
2780 std::unique_ptr<double[]> i1data = in(1)->get_block(x3, c3, c1, c2);
2781 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x3, c3, c1, c2)]);
2782 sort_indices<3,1,0,2,0,1,-2,1>(i1data, i1data_sorted, x3.size(), c3.size(), c1.size(), c2.size());
2783 dgemm_("T", "N", x5.size()*x4.size(), x3.size()*c1.size(), c3.size()*c2.size(),
2784 1.0, i0data_sorted, c3.size()*c2.size(), i1data_sorted, c3.size()*c2.size(),
2785 1.0, odata_sorted, x5.size()*x4.size());
2786 }
2787 }
2788 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x5.size(), x4.size(), x3.size(), c1.size());
2789 out()->add_block(odata, x3, c1, x5, x4);
2790 }
2791
compute()2792 void Task143::Task_local::compute() {
2793 const Index x3 = b(0);
2794 const Index c1 = b(1);
2795 const Index x5 = b(2);
2796 const Index x4 = b(3);
2797 // tensor label: I10
2798 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, c1, x5, x4)]);
2799 std::fill_n(odata.get(), out()->get_size(x3, c1, x5, x4), 0.0);
2800 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(x3, c1, x5, x4)]);
2801 std::fill_n(odata_sorted.get(), out()->get_size(x3, c1, x5, x4), 0.0);
2802 for (auto& c2 : *range_[0]) {
2803 for (auto& a3 : *range_[2]) {
2804 // tensor label: t2
2805 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, a3, c1, x5);
2806 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c2, a3, c1, x5)]);
2807 sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, c2.size(), a3.size(), c1.size(), x5.size());
2808 // tensor label: v2
2809 std::unique_ptr<double[]> i1data = in(1)->get_block(a3, x4, x3, c2);
2810 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(a3, x4, x3, c2)]);
2811 sort_indices<3,0,1,2,0,1,1,2>(i1data, i1data_sorted, a3.size(), x4.size(), x3.size(), c2.size());
2812 dgemm_("T", "N", c1.size()*x5.size(), x4.size()*x3.size(), a3.size()*c2.size(),
2813 1.0, i0data_sorted, a3.size()*c2.size(), i1data_sorted, a3.size()*c2.size(),
2814 1.0, odata_sorted, c1.size()*x5.size());
2815 }
2816 }
2817 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, c1.size(), x5.size(), x4.size(), x3.size());
2818 out()->add_block(odata, x3, c1, x5, x4);
2819 }
2820
compute()2821 void Task144::Task_local::compute() {
2822 const Index c1 = b(0);
2823 const Index x2 = b(1);
2824 const Index x1 = b(2);
2825 const Index x0 = b(3);
2826 // tensor label: I9
2827 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x2, x1, x0)]);
2828 std::fill_n(odata.get(), out()->get_size(c1, x2, x1, x0), 0.0);
2829 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x2, x1, x0)]);
2830 std::fill_n(odata_sorted.get(), out()->get_size(c1, x2, x1, x0), 0.0);
2831 for (auto& x5 : *range_[1]) {
2832 for (auto& x4 : *range_[1]) {
2833 for (auto& x3 : *range_[1]) {
2834 // tensor label: Gamma4
2835 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4, x2, x3, x1, x0);
2836 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, x4, x2, x3, x1, x0)]);
2837 sort_indices<0,1,3,2,4,5,0,1,1,1>(i0data, i0data_sorted, x5.size(), x4.size(), x2.size(), x3.size(), x1.size(), x0.size());
2838 // tensor label: I13
2839 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x5, x4, x3);
2840 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x5, x4, x3)]);
2841 sort_indices<1,2,3,0,0,1,1,1>(i1data, i1data_sorted, c1.size(), x5.size(), x4.size(), x3.size());
2842 dgemm_("T", "N", x2.size()*x1.size()*x0.size(), c1.size(), x5.size()*x4.size()*x3.size(),
2843 1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
2844 1.0, odata_sorted, x2.size()*x1.size()*x0.size());
2845 }
2846 }
2847 }
2848 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x2.size(), x1.size(), x0.size(), c1.size());
2849 out()->add_block(odata, c1, x2, x1, x0);
2850 }
2851
compute()2852 void Task145::Task_local::compute() {
2853 const Index c1 = b(0);
2854 const Index x5 = b(1);
2855 const Index x4 = b(2);
2856 const Index x3 = b(3);
2857 // tensor label: I13
2858 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x5, x4, x3)]);
2859 std::fill_n(odata.get(), out()->get_size(c1, x5, x4, x3), 0.0);
2860 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x5, x4, x3)]);
2861 std::fill_n(odata_sorted.get(), out()->get_size(c1, x5, x4, x3), 0.0);
2862 for (auto& c2 : *range_[0]) {
2863 // tensor label: t2
2864 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4, c2, x3);
2865 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, x4, c2, x3)]);
2866 sort_indices<2,0,1,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), x4.size(), c2.size(), x3.size());
2867 // tensor label: h1
2868 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, c2);
2869 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, c2)]);
2870 sort_indices<1,0,0,1,-1,1>(i1data, i1data_sorted, c1.size(), c2.size());
2871 dgemm_("T", "N", x5.size()*x4.size()*x3.size(), c1.size(), c2.size(),
2872 1.0, i0data_sorted, c2.size(), i1data_sorted, c2.size(),
2873 1.0, odata_sorted, x5.size()*x4.size()*x3.size());
2874 }
2875 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x4.size(), x3.size(), c1.size());
2876 out()->add_block(odata, c1, x5, x4, x3);
2877 }
2878
compute()2879 void Task146::Task_local::compute() {
2880 const Index c1 = b(0);
2881 const Index x5 = b(1);
2882 const Index x4 = b(2);
2883 const Index x3 = b(3);
2884 // tensor label: I13
2885 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x5, x4, x3)]);
2886 std::fill_n(odata.get(), out()->get_size(c1, x5, x4, x3), 0.0);
2887 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x5, x4, x3)]);
2888 std::fill_n(odata_sorted.get(), out()->get_size(c1, x5, x4, x3), 0.0);
2889 for (auto& a2 : *range_[2]) {
2890 // tensor label: t2
2891 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, a2, x5, x4);
2892 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c1, a2, x5, x4)]);
2893 sort_indices<1,0,2,3,0,1,1,1>(i0data, i0data_sorted, c1.size(), a2.size(), x5.size(), x4.size());
2894 // tensor label: h1
2895 std::unique_ptr<double[]> i1data = in(1)->get_block(a2, x3);
2896 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(a2, x3)]);
2897 sort_indices<0,1,0,1,1,1>(i1data, i1data_sorted, a2.size(), x3.size());
2898 dgemm_("T", "N", c1.size()*x5.size()*x4.size(), x3.size(), a2.size(),
2899 1.0, i0data_sorted, a2.size(), i1data_sorted, a2.size(),
2900 1.0, odata_sorted, c1.size()*x5.size()*x4.size());
2901 }
2902 sort_indices<0,1,2,3,1,1,1,1>(odata_sorted, odata, c1.size(), x5.size(), x4.size(), x3.size());
2903 out()->add_block(odata, c1, x5, x4, x3);
2904 }
2905
compute()2906 void Task147::Task_local::compute() {
2907 const Index c1 = b(0);
2908 const Index x5 = b(1);
2909 const Index x4 = b(2);
2910 const Index x3 = b(3);
2911 // tensor label: I13
2912 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x5, x4, x3)]);
2913 std::fill_n(odata.get(), out()->get_size(c1, x5, x4, x3), 0.0);
2914 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x5, x4, x3)]);
2915 std::fill_n(odata_sorted.get(), out()->get_size(c1, x5, x4, x3), 0.0);
2916 for (auto& a3 : *range_[2]) {
2917 for (auto& c2 : *range_[0]) {
2918 // tensor label: t2
2919 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, a3, c2, x4);
2920 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, a3, c2, x4)]);
2921 sort_indices<1,2,0,3,0,1,1,1>(i0data, i0data_sorted, x5.size(), a3.size(), c2.size(), x4.size());
2922 // tensor label: v2
2923 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x3, a3, c2);
2924 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x3, a3, c2)]);
2925 sort_indices<2,3,0,1,0,1,-1,1>(i1data, i1data_sorted, c1.size(), x3.size(), a3.size(), c2.size());
2926 dgemm_("T", "N", x5.size()*x4.size(), c1.size()*x3.size(), a3.size()*c2.size(),
2927 1.0, i0data_sorted, a3.size()*c2.size(), i1data_sorted, a3.size()*c2.size(),
2928 1.0, odata_sorted, x5.size()*x4.size());
2929 }
2930 }
2931 sort_indices<2,0,1,3,1,1,1,1>(odata_sorted, odata, x5.size(), x4.size(), c1.size(), x3.size());
2932 out()->add_block(odata, c1, x5, x4, x3);
2933 }
2934
compute()2935 void Task148::Task_local::compute() {
2936 const Index c1 = b(0);
2937 const Index x5 = b(1);
2938 const Index x4 = b(2);
2939 const Index x3 = b(3);
2940 // tensor label: I13
2941 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x5, x4, x3)]);
2942 std::fill_n(odata.get(), out()->get_size(c1, x5, x4, x3), 0.0);
2943 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x5, x4, x3)]);
2944 std::fill_n(odata_sorted.get(), out()->get_size(c1, x5, x4, x3), 0.0);
2945 for (auto& c2 : *range_[0]) {
2946 for (auto& a3 : *range_[2]) {
2947 // tensor label: t2
2948 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, a3, x5, x4);
2949 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c2, a3, x5, x4)]);
2950 sort_indices<0,1,2,3,0,1,1,1>(i0data, i0data_sorted, c2.size(), a3.size(), x5.size(), x4.size());
2951 // tensor label: I370
2952 std::unique_ptr<double[]> i1data = in(1)->get_block(a3, x3, c1, c2);
2953 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(a3, x3, c1, c2)]);
2954 sort_indices<3,0,1,2,0,1,1,1>(i1data, i1data_sorted, a3.size(), x3.size(), c1.size(), c2.size());
2955 dgemm_("T", "N", x5.size()*x4.size(), x3.size()*c1.size(), a3.size()*c2.size(),
2956 1.0, i0data_sorted, a3.size()*c2.size(), i1data_sorted, a3.size()*c2.size(),
2957 1.0, odata_sorted, x5.size()*x4.size());
2958 }
2959 }
2960 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x5.size(), x4.size(), x3.size(), c1.size());
2961 out()->add_block(odata, c1, x5, x4, x3);
2962 }
2963
compute()2964 void Task149::Task_local::compute() {
2965 const Index a3 = b(0);
2966 const Index x3 = b(1);
2967 const Index c1 = b(2);
2968 const Index c2 = b(3);
2969 // tensor label: I370
2970 std::unique_ptr<double[]> odata(new double[out()->get_size(a3, x3, c1, c2)]);
2971 std::fill_n(odata.get(), out()->get_size(a3, x3, c1, c2), 0.0);
2972 {
2973 // tensor label: v2
2974 std::unique_ptr<double[]> i0data = in(0)->get_block(a3, x3, c1, c2);
2975 sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, a3.size(), x3.size(), c1.size(), c2.size());
2976 }
2977 {
2978 // tensor label: v2
2979 std::unique_ptr<double[]> i1data = in(0)->get_block(c1, x3, a3, c2);
2980 sort_indices<2,1,0,3,1,1,2,1>(i1data, odata, c1.size(), x3.size(), a3.size(), c2.size());
2981 }
2982 out()->add_block(odata, a3, x3, c1, c2);
2983 }
2984
2985 #endif
2986