1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: CASPT2_tasks1.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/caspt2/CASPT2_tasks1.h>
29
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::CASPT2;
34
compute()35 void Task0::Task_local::compute() {
36 const Index x0 = b(0);
37 const Index x5 = b(1);
38 const Index x1 = b(2);
39 const Index x4 = b(3);
40 const Index x3 = b(4);
41 const Index x2 = b(5);
42 // tensor label: Gamma0
43 std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x5, x1, x4)]);
44 std::fill_n(odata.get(), out()->get_size(x0, x5, x1, x4), 0.0);
45 // associated with merged
46 std::unique_ptr<double[]> fdata = in(4)->get_block(x3, x2);
47 if (x1 == x5 && x0 == x4) {
48 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
49 for (int i2 = 0; i2 != x2.size(); ++i2) {
50 for (int i3 = 0; i3 != x3.size(); ++i3) {
51 for (int i5 = 0; i5 != x5.size(); ++i5) {
52 for (int i4 = 0; i4 != x4.size(); ++i4) {
53 odata[i4+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))]
54 += (-2.0) * i0data[i3+x3.size()*(i2)] * fdata[i3+x3.size()*(i2)];
55 }
56 }
57 }
58 }
59 }
60 if (x1 == x4 && x0 == x5) {
61 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
62 for (int i2 = 0; i2 != x2.size(); ++i2) {
63 for (int i3 = 0; i3 != x3.size(); ++i3) {
64 for (int i4 = 0; i4 != x4.size(); ++i4) {
65 for (int i5 = 0; i5 != x5.size(); ++i5) {
66 odata[i5+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))]
67 += (4.0) * i0data[i3+x3.size()*(i2)] * fdata[i3+x3.size()*(i2)];
68 }
69 }
70 }
71 }
72 }
73 // rdm0 merged case
74 if (x1 == x4 && x0 == x2 && x3 == x5) {
75 std::unique_ptr<double[]> i0data = in(0)->get_block();
76 for (int i4 = 0; i4 != x4.size(); ++i4) {
77 for (int i2 = 0; i2 != x2.size(); ++i2) {
78 for (int i5 = 0; i5 != x5.size(); ++i5) {
79 odata[i2+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))] += 4.0 * i0data[0] * fdata[i5+x3.size()*(i2)];
80 }
81 }
82 }
83 }
84 if (x0 == x2 && x1 == x4) {
85 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x5);
86 for (int i5 = 0; i5 != x5.size(); ++i5) {
87 for (int i3 = 0; i3 != x3.size(); ++i3) {
88 for (int i2 = 0; i2 != x2.size(); ++i2) {
89 for (int i4 = 0; i4 != x4.size(); ++i4) {
90 odata[i2+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))]
91 += (-2.0) * i0data[i3+x3.size()*(i5)] * fdata[i3+x3.size()*(i2)];
92 }
93 }
94 }
95 }
96 }
97 // rdm0 merged case
98 if (x1 == x5 && x3 == x4 && x0 == x2) {
99 std::unique_ptr<double[]> i0data = in(0)->get_block();
100 for (int i5 = 0; i5 != x5.size(); ++i5) {
101 for (int i4 = 0; i4 != x4.size(); ++i4) {
102 for (int i2 = 0; i2 != x2.size(); ++i2) {
103 odata[i2+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))] += -2.0 * i0data[0] * fdata[i4+x3.size()*(i2)];
104 }
105 }
106 }
107 }
108 if (x1 == x5 && x0 == x2) {
109 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
110 for (int i4 = 0; i4 != x4.size(); ++i4) {
111 for (int i3 = 0; i3 != x3.size(); ++i3) {
112 for (int i5 = 0; i5 != x5.size(); ++i5) {
113 for (int i2 = 0; i2 != x2.size(); ++i2) {
114 odata[i2+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))]
115 += (1.0) * i0data[i3+x3.size()*(i4)] * fdata[i3+x3.size()*(i2)];
116 }
117 }
118 }
119 }
120 }
121 if (x3 == x4 && x0 == x2) {
122 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x5);
123 for (int i5 = 0; i5 != x5.size(); ++i5) {
124 for (int i1 = 0; i1 != x1.size(); ++i1) {
125 for (int i4 = 0; i4 != x4.size(); ++i4) {
126 for (int i2 = 0; i2 != x2.size(); ++i2) {
127 odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
128 += (1.0) * i0data[i1+x1.size()*(i5)] * fdata[i4+x3.size()*(i2)];
129 }
130 }
131 }
132 }
133 }
134 if (x3 == x5 && x0 == x2) {
135 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x4);
136 for (int i4 = 0; i4 != x4.size(); ++i4) {
137 for (int i1 = 0; i1 != x1.size(); ++i1) {
138 for (int i5 = 0; i5 != x5.size(); ++i5) {
139 for (int i2 = 0; i2 != x2.size(); ++i2) {
140 odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
141 += (-2.0) * i0data[i1+x1.size()*(i4)] * fdata[i5+x3.size()*(i2)];
142 }
143 }
144 }
145 }
146 }
147 if (x0 == x2) {
148 std::unique_ptr<double[]> i0data = in(2)->get_block(x3, x5, x1, x4);
149 for (int i4 = 0; i4 != x4.size(); ++i4) {
150 for (int i1 = 0; i1 != x1.size(); ++i1) {
151 for (int i5 = 0; i5 != x5.size(); ++i5) {
152 for (int i3 = 0; i3 != x3.size(); ++i3) {
153 for (int i2 = 0; i2 != x2.size(); ++i2) {
154 odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
155 += (1.0) * i0data[i3+x3.size()*(i5+x5.size()*(i1+x1.size()*(i4)))] * fdata[i3+x3.size()*(i2)];
156 }
157 }
158 }
159 }
160 }
161 }
162 // rdm0 merged case
163 if (x3 == x5 && x1 == x2 && x0 == x4) {
164 std::unique_ptr<double[]> i0data = in(0)->get_block();
165 for (int i5 = 0; i5 != x5.size(); ++i5) {
166 for (int i2 = 0; i2 != x2.size(); ++i2) {
167 for (int i4 = 0; i4 != x4.size(); ++i4) {
168 odata[i4+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))] += -2.0 * i0data[0] * fdata[i5+x3.size()*(i2)];
169 }
170 }
171 }
172 }
173 if (x1 == x2 && x0 == x4) {
174 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x5);
175 for (int i5 = 0; i5 != x5.size(); ++i5) {
176 for (int i3 = 0; i3 != x3.size(); ++i3) {
177 for (int i2 = 0; i2 != x2.size(); ++i2) {
178 for (int i4 = 0; i4 != x4.size(); ++i4) {
179 odata[i4+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
180 += (1.0) * i0data[i3+x3.size()*(i5)] * fdata[i3+x3.size()*(i2)];
181 }
182 }
183 }
184 }
185 }
186 if (x3 == x5 && x0 == x4) {
187 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
188 for (int i2 = 0; i2 != x2.size(); ++i2) {
189 for (int i1 = 0; i1 != x1.size(); ++i1) {
190 for (int i5 = 0; i5 != x5.size(); ++i5) {
191 for (int i4 = 0; i4 != x4.size(); ++i4) {
192 odata[i4+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
193 += (1.0) * i0data[i1+x1.size()*(i2)] * fdata[i5+x3.size()*(i2)];
194 }
195 }
196 }
197 }
198 }
199 if (x0 == x4) {
200 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x5, x3, x2);
201 for (int i2 = 0; i2 != x2.size(); ++i2) {
202 for (int i3 = 0; i3 != x3.size(); ++i3) {
203 for (int i5 = 0; i5 != x5.size(); ++i5) {
204 for (int i1 = 0; i1 != x1.size(); ++i1) {
205 for (int i4 = 0; i4 != x4.size(); ++i4) {
206 odata[i4+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
207 += (1.0) * i0data[i1+x1.size()*(i5+x5.size()*(i3+x3.size()*(i2)))] * fdata[i3+x3.size()*(i2)];
208 }
209 }
210 }
211 }
212 }
213 }
214 // rdm0 merged case
215 if (x3 == x4 && x0 == x5 && x1 == x2) {
216 std::unique_ptr<double[]> i0data = in(0)->get_block();
217 for (int i4 = 0; i4 != x4.size(); ++i4) {
218 for (int i5 = 0; i5 != x5.size(); ++i5) {
219 for (int i2 = 0; i2 != x2.size(); ++i2) {
220 odata[i5+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))] += 4.0 * i0data[0] * fdata[i4+x3.size()*(i2)];
221 }
222 }
223 }
224 }
225 if (x0 == x5 && x1 == x2) {
226 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
227 for (int i4 = 0; i4 != x4.size(); ++i4) {
228 for (int i3 = 0; i3 != x3.size(); ++i3) {
229 for (int i5 = 0; i5 != x5.size(); ++i5) {
230 for (int i2 = 0; i2 != x2.size(); ++i2) {
231 odata[i5+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
232 += (-2.0) * i0data[i3+x3.size()*(i4)] * fdata[i3+x3.size()*(i2)];
233 }
234 }
235 }
236 }
237 }
238 if (x3 == x4 && x0 == x5) {
239 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
240 for (int i2 = 0; i2 != x2.size(); ++i2) {
241 for (int i1 = 0; i1 != x1.size(); ++i1) {
242 for (int i4 = 0; i4 != x4.size(); ++i4) {
243 for (int i5 = 0; i5 != x5.size(); ++i5) {
244 odata[i5+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
245 += (-2.0) * i0data[i1+x1.size()*(i2)] * fdata[i4+x3.size()*(i2)];
246 }
247 }
248 }
249 }
250 }
251 if (x0 == x5) {
252 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x3, x2);
253 for (int i2 = 0; i2 != x2.size(); ++i2) {
254 for (int i3 = 0; i3 != x3.size(); ++i3) {
255 for (int i4 = 0; i4 != x4.size(); ++i4) {
256 for (int i1 = 0; i1 != x1.size(); ++i1) {
257 for (int i5 = 0; i5 != x5.size(); ++i5) {
258 odata[i5+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
259 += (-2.0) * i0data[i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i3+x3.size()*(i2)];
260 }
261 }
262 }
263 }
264 }
265 }
266 if (x3 == x4 && x1 == x2) {
267 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x5);
268 for (int i5 = 0; i5 != x5.size(); ++i5) {
269 for (int i0 = 0; i0 != x0.size(); ++i0) {
270 for (int i4 = 0; i4 != x4.size(); ++i4) {
271 for (int i2 = 0; i2 != x2.size(); ++i2) {
272 odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
273 += (-2.0) * i0data[i0+x0.size()*(i5)] * fdata[i4+x3.size()*(i2)];
274 }
275 }
276 }
277 }
278 }
279 if (x3 == x5 && x1 == x2) {
280 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x4);
281 for (int i4 = 0; i4 != x4.size(); ++i4) {
282 for (int i0 = 0; i0 != x0.size(); ++i0) {
283 for (int i5 = 0; i5 != x5.size(); ++i5) {
284 for (int i2 = 0; i2 != x2.size(); ++i2) {
285 odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
286 += (1.0) * i0data[i0+x0.size()*(i4)] * fdata[i5+x3.size()*(i2)];
287 }
288 }
289 }
290 }
291 }
292 if (x1 == x2) {
293 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x5, x3, x4);
294 for (int i4 = 0; i4 != x4.size(); ++i4) {
295 for (int i3 = 0; i3 != x3.size(); ++i3) {
296 for (int i5 = 0; i5 != x5.size(); ++i5) {
297 for (int i0 = 0; i0 != x0.size(); ++i0) {
298 for (int i2 = 0; i2 != x2.size(); ++i2) {
299 odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4)))]
300 += (1.0) * i0data[i0+x0.size()*(i5+x5.size()*(i3+x3.size()*(i4)))] * fdata[i3+x3.size()*(i2)];
301 }
302 }
303 }
304 }
305 }
306 }
307 if (x3 == x5 && x1 == x4) {
308 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
309 for (int i2 = 0; i2 != x2.size(); ++i2) {
310 for (int i0 = 0; i0 != x0.size(); ++i0) {
311 for (int i5 = 0; i5 != x5.size(); ++i5) {
312 for (int i4 = 0; i4 != x4.size(); ++i4) {
313 odata[i0+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))]
314 += (-2.0) * i0data[i0+x0.size()*(i2)] * fdata[i5+x3.size()*(i2)];
315 }
316 }
317 }
318 }
319 }
320 if (x1 == x4) {
321 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x5, x3, x2);
322 for (int i2 = 0; i2 != x2.size(); ++i2) {
323 for (int i3 = 0; i3 != x3.size(); ++i3) {
324 for (int i5 = 0; i5 != x5.size(); ++i5) {
325 for (int i0 = 0; i0 != x0.size(); ++i0) {
326 for (int i4 = 0; i4 != x4.size(); ++i4) {
327 odata[i0+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4)))]
328 += (-2.0) * i0data[i0+x0.size()*(i5+x5.size()*(i3+x3.size()*(i2)))] * fdata[i3+x3.size()*(i2)];
329 }
330 }
331 }
332 }
333 }
334 }
335 if (x3 == x4 && x1 == x5) {
336 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
337 for (int i2 = 0; i2 != x2.size(); ++i2) {
338 for (int i0 = 0; i0 != x0.size(); ++i0) {
339 for (int i4 = 0; i4 != x4.size(); ++i4) {
340 for (int i5 = 0; i5 != x5.size(); ++i5) {
341 odata[i0+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))]
342 += (1.0) * i0data[i0+x0.size()*(i2)] * fdata[i4+x3.size()*(i2)];
343 }
344 }
345 }
346 }
347 }
348 if (x1 == x5) {
349 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x4, x3, x2);
350 for (int i2 = 0; i2 != x2.size(); ++i2) {
351 for (int i3 = 0; i3 != x3.size(); ++i3) {
352 for (int i4 = 0; i4 != x4.size(); ++i4) {
353 for (int i0 = 0; i0 != x0.size(); ++i0) {
354 for (int i5 = 0; i5 != x5.size(); ++i5) {
355 odata[i0+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4)))]
356 += (1.0) * i0data[i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2)))] * fdata[i3+x3.size()*(i2)];
357 }
358 }
359 }
360 }
361 }
362 }
363 if (x3 == x4) {
364 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x5, x1, x2);
365 for (int i2 = 0; i2 != x2.size(); ++i2) {
366 for (int i1 = 0; i1 != x1.size(); ++i1) {
367 for (int i5 = 0; i5 != x5.size(); ++i5) {
368 for (int i0 = 0; i0 != x0.size(); ++i0) {
369 for (int i4 = 0; i4 != x4.size(); ++i4) {
370 odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
371 += (1.0) * i0data[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i2)))] * fdata[i4+x3.size()*(i2)];
372 }
373 }
374 }
375 }
376 }
377 }
378 if (x3 == x5) {
379 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x0, x2);
380 for (int i2 = 0; i2 != x2.size(); ++i2) {
381 for (int i0 = 0; i0 != x0.size(); ++i0) {
382 for (int i4 = 0; i4 != x4.size(); ++i4) {
383 for (int i1 = 0; i1 != x1.size(); ++i1) {
384 for (int i5 = 0; i5 != x5.size(); ++i5) {
385 odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
386 += (1.0) * i0data[i1+x1.size()*(i4+x4.size()*(i0+x0.size()*(i2)))] * fdata[i5+x3.size()*(i2)];
387 }
388 }
389 }
390 }
391 }
392 }
393 {
394 std::unique_ptr<double[]> i0data = in(3)->get_block(x0, x5, x1, x4, x3, x2);
395 for (int i2 = 0; i2 != x2.size(); ++i2) {
396 for (int i3 = 0; i3 != x3.size(); ++i3) {
397 for (int i4 = 0; i4 != x4.size(); ++i4) {
398 for (int i1 = 0; i1 != x1.size(); ++i1) {
399 for (int i5 = 0; i5 != x5.size(); ++i5) {
400 for (int i0 = 0; i0 != x0.size(); ++i0) {
401 odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4)))]
402 += (1.0) * i0data[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))] * fdata[i3+x3.size()*(i2)];
403 }
404 }
405 }
406 }
407 }
408 }
409 }
410 out()->add_block(odata, x0, x5, x1, x4);
411 }
412
compute()413 void Task1::Task_local::compute() {
414 const Index x0 = b(0);
415 const Index x3 = b(1);
416 const Index x1 = b(2);
417 const Index x2 = b(3);
418 // tensor label: Gamma92
419 std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x3, x1, x2)]);
420 std::fill_n(odata.get(), out()->get_size(x0, x3, x1, x2), 0.0);
421 {
422 // rdm0 non-merged case
423 if (x1 == x3 && x0 == x2) {
424 std::unique_ptr<double[]> i0data = in(0)->get_block();
425 for (int i2 = 0; i2 != x2.size(); ++i2) {
426 for (int i3 = 0; i3 != x3.size(); ++i3) {
427 odata[i2+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))] += -2.0 * i0data[0];
428 }
429 }
430 }
431 }
432 {
433 if (x0 == x2) {
434 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x3);
435 for (int i2 = 0; i2 != x2.size(); ++i2) {
436 for (int i1 = 0; i1 != x1.size(); ++i1) {
437 for (int i3 = 0; i3 != x3.size(); ++i3) {
438 odata[i2+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))]
439 += (1.0) * i0data[i1+x1.size()*(i3)];
440 }
441 }
442 }
443 }
444 }
445 {
446 // rdm0 non-merged case
447 if (x1 == x2 && x0 == x3) {
448 std::unique_ptr<double[]> i0data = in(0)->get_block();
449 for (int i2 = 0; i2 != x2.size(); ++i2) {
450 for (int i3 = 0; i3 != x3.size(); ++i3) {
451 odata[i3+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))] += 4.0 * i0data[0];
452 }
453 }
454 }
455 }
456 {
457 if (x0 == x3) {
458 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
459 for (int i2 = 0; i2 != x2.size(); ++i2) {
460 for (int i1 = 0; i1 != x1.size(); ++i1) {
461 for (int i3 = 0; i3 != x3.size(); ++i3) {
462 odata[i3+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))]
463 += (-2.0) * i0data[i1+x1.size()*(i2)];
464 }
465 }
466 }
467 }
468 }
469 {
470 if (x1 == x2) {
471 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x3);
472 for (int i2 = 0; i2 != x2.size(); ++i2) {
473 for (int i3 = 0; i3 != x3.size(); ++i3) {
474 for (int i0 = 0; i0 != x0.size(); ++i0) {
475 odata[i0+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))]
476 += (-2.0) * i0data[i0+x0.size()*(i3)];
477 }
478 }
479 }
480 }
481 }
482 {
483 if (x1 == x3) {
484 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
485 for (int i2 = 0; i2 != x2.size(); ++i2) {
486 for (int i3 = 0; i3 != x3.size(); ++i3) {
487 for (int i0 = 0; i0 != x0.size(); ++i0) {
488 odata[i0+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))]
489 += (1.0) * i0data[i0+x0.size()*(i2)];
490 }
491 }
492 }
493 }
494 }
495 {
496 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x3, x1, x2);
497 sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x0.size(), x3.size(), x1.size(), x2.size());
498 }
499 out()->add_block(odata, x0, x3, x1, x2);
500 }
501
compute()502 void Task2::Task_local::compute() {
503 const Index x5 = b(0);
504 const Index x4 = b(1);
505 const Index x0 = b(2);
506 const Index x3 = b(3);
507 const Index x1 = b(4);
508 const Index x2 = b(5);
509 // tensor label: Gamma2
510 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x0, x3, x1, x2)]);
511 std::fill_n(odata.get(), out()->get_size(x5, x4, x0, x3, x1, x2), 0.0);
512 {
513 if (x1 == x3 && x0 == x2) {
514 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4);
515 for (int i2 = 0; i2 != x2.size(); ++i2) {
516 for (int i3 = 0; i3 != x3.size(); ++i3) {
517 for (int i4 = 0; i4 != x4.size(); ++i4) {
518 for (int i5 = 0; i5 != x5.size(); ++i5) {
519 odata[i5+x5.size()*(i4+x4.size()*(i2+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))))]
520 += (-2.0) * i0data[i5+x5.size()*(i4)];
521 }
522 }
523 }
524 }
525 }
526 }
527 {
528 if (x1 == x4 && x0 == x2) {
529 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x3);
530 for (int i2 = 0; i2 != x2.size(); ++i2) {
531 for (int i3 = 0; i3 != x3.size(); ++i3) {
532 for (int i4 = 0; i4 != x4.size(); ++i4) {
533 for (int i5 = 0; i5 != x5.size(); ++i5) {
534 odata[i5+x5.size()*(i4+x4.size()*(i2+x0.size()*(i3+x3.size()*(i4+x1.size()*(i2)))))]
535 += (1.0) * i0data[i5+x5.size()*(i3)];
536 }
537 }
538 }
539 }
540 }
541 }
542 {
543 if (x0 == x2) {
544 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x3);
545 for (int i2 = 0; i2 != x2.size(); ++i2) {
546 for (int i1 = 0; i1 != x1.size(); ++i1) {
547 for (int i3 = 0; i3 != x3.size(); ++i3) {
548 for (int i4 = 0; i4 != x4.size(); ++i4) {
549 for (int i5 = 0; i5 != x5.size(); ++i5) {
550 odata[i5+x5.size()*(i4+x4.size()*(i2+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))))]
551 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i3)))];
552 }
553 }
554 }
555 }
556 }
557 }
558 }
559 {
560 if (x1 == x2 && x0 == x3) {
561 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4);
562 for (int i2 = 0; i2 != x2.size(); ++i2) {
563 for (int i3 = 0; i3 != x3.size(); ++i3) {
564 for (int i4 = 0; i4 != x4.size(); ++i4) {
565 for (int i5 = 0; i5 != x5.size(); ++i5) {
566 odata[i5+x5.size()*(i4+x4.size()*(i3+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))))]
567 += (4.0) * i0data[i5+x5.size()*(i4)];
568 }
569 }
570 }
571 }
572 }
573 }
574 {
575 if (x1 == x4 && x0 == x3) {
576 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x2);
577 for (int i2 = 0; i2 != x2.size(); ++i2) {
578 for (int i3 = 0; i3 != x3.size(); ++i3) {
579 for (int i4 = 0; i4 != x4.size(); ++i4) {
580 for (int i5 = 0; i5 != x5.size(); ++i5) {
581 odata[i5+x5.size()*(i4+x4.size()*(i3+x0.size()*(i3+x3.size()*(i4+x1.size()*(i2)))))]
582 += (-2.0) * i0data[i5+x5.size()*(i2)];
583 }
584 }
585 }
586 }
587 }
588 }
589 {
590 if (x0 == x3) {
591 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x2);
592 for (int i2 = 0; i2 != x2.size(); ++i2) {
593 for (int i1 = 0; i1 != x1.size(); ++i1) {
594 for (int i3 = 0; i3 != x3.size(); ++i3) {
595 for (int i4 = 0; i4 != x4.size(); ++i4) {
596 for (int i5 = 0; i5 != x5.size(); ++i5) {
597 odata[i5+x5.size()*(i4+x4.size()*(i3+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))))]
598 += (-2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i2)))];
599 }
600 }
601 }
602 }
603 }
604 }
605 }
606 {
607 if (x1 == x2 && x0 == x4) {
608 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x3);
609 for (int i2 = 0; i2 != x2.size(); ++i2) {
610 for (int i3 = 0; i3 != x3.size(); ++i3) {
611 for (int i4 = 0; i4 != x4.size(); ++i4) {
612 for (int i5 = 0; i5 != x5.size(); ++i5) {
613 odata[i5+x5.size()*(i4+x4.size()*(i4+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))))]
614 += (-2.0) * i0data[i5+x5.size()*(i3)];
615 }
616 }
617 }
618 }
619 }
620 }
621 {
622 if (x1 == x3 && x0 == x4) {
623 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x2);
624 for (int i2 = 0; i2 != x2.size(); ++i2) {
625 for (int i3 = 0; i3 != x3.size(); ++i3) {
626 for (int i4 = 0; i4 != x4.size(); ++i4) {
627 for (int i5 = 0; i5 != x5.size(); ++i5) {
628 odata[i5+x5.size()*(i4+x4.size()*(i4+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))))]
629 += (1.0) * i0data[i5+x5.size()*(i2)];
630 }
631 }
632 }
633 }
634 }
635 }
636 {
637 if (x0 == x4) {
638 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x1, x2);
639 for (int i2 = 0; i2 != x2.size(); ++i2) {
640 for (int i1 = 0; i1 != x1.size(); ++i1) {
641 for (int i3 = 0; i3 != x3.size(); ++i3) {
642 for (int i4 = 0; i4 != x4.size(); ++i4) {
643 for (int i5 = 0; i5 != x5.size(); ++i5) {
644 odata[i5+x5.size()*(i4+x4.size()*(i4+x0.size()*(i3+x3.size()*(i1+x1.size()*(i2)))))]
645 += (1.0) * i0data[i5+x5.size()*(i3+x3.size()*(i1+x1.size()*(i2)))];
646 }
647 }
648 }
649 }
650 }
651 }
652 }
653 {
654 if (x1 == x2) {
655 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x0, x3);
656 for (int i2 = 0; i2 != x2.size(); ++i2) {
657 for (int i3 = 0; i3 != x3.size(); ++i3) {
658 for (int i0 = 0; i0 != x0.size(); ++i0) {
659 for (int i4 = 0; i4 != x4.size(); ++i4) {
660 for (int i5 = 0; i5 != x5.size(); ++i5) {
661 odata[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i3+x3.size()*(i2+x1.size()*(i2)))))]
662 += (-2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i3)))];
663 }
664 }
665 }
666 }
667 }
668 }
669 }
670 {
671 if (x1 == x3) {
672 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x0, x2);
673 for (int i2 = 0; i2 != x2.size(); ++i2) {
674 for (int i3 = 0; i3 != x3.size(); ++i3) {
675 for (int i0 = 0; i0 != x0.size(); ++i0) {
676 for (int i4 = 0; i4 != x4.size(); ++i4) {
677 for (int i5 = 0; i5 != x5.size(); ++i5) {
678 odata[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i3+x3.size()*(i3+x1.size()*(i2)))))]
679 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i2)))];
680 }
681 }
682 }
683 }
684 }
685 }
686 }
687 {
688 if (x1 == x4) {
689 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2, x0, x3);
690 for (int i2 = 0; i2 != x2.size(); ++i2) {
691 for (int i3 = 0; i3 != x3.size(); ++i3) {
692 for (int i0 = 0; i0 != x0.size(); ++i0) {
693 for (int i4 = 0; i4 != x4.size(); ++i4) {
694 for (int i5 = 0; i5 != x5.size(); ++i5) {
695 odata[i5+x5.size()*(i4+x4.size()*(i0+x0.size()*(i3+x3.size()*(i4+x1.size()*(i2)))))]
696 += (1.0) * i0data[i5+x5.size()*(i2+x2.size()*(i0+x0.size()*(i3)))];
697 }
698 }
699 }
700 }
701 }
702 }
703 }
704 {
705 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x0, x3, x1, x2);
706 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x4.size(), x0.size(), x3.size(), x1.size(), x2.size());
707 }
708 out()->add_block(odata, x5, x4, x0, x3, x1, x2);
709 }
710
compute()711 void Task3::Task_local::compute() {
712 const Index x1 = b(0);
713 const Index x3 = b(1);
714 const Index x0 = b(2);
715 const Index x2 = b(3);
716 // tensor label: Gamma3
717 std::unique_ptr<double[]> odata(new double[out()->get_size(x1, x3, x0, x2)]);
718 std::fill_n(odata.get(), out()->get_size(x1, x3, x0, x2), 0.0);
719 {
720 // rdm0 non-merged case
721 if (x1 == x3 && x0 == x2) {
722 std::unique_ptr<double[]> i0data = in(0)->get_block();
723 for (int i2 = 0; i2 != x2.size(); ++i2) {
724 for (int i3 = 0; i3 != x3.size(); ++i3) {
725 odata[i3+x1.size()*(i3+x3.size()*(i2+x0.size()*(i2)))] += -4.0 * i0data[0];
726 }
727 }
728 }
729 }
730 {
731 if (x0 == x2) {
732 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x3);
733 for (int i2 = 0; i2 != x2.size(); ++i2) {
734 for (int i3 = 0; i3 != x3.size(); ++i3) {
735 for (int i1 = 0; i1 != x1.size(); ++i1) {
736 odata[i1+x1.size()*(i3+x3.size()*(i2+x0.size()*(i2)))]
737 += (2.0) * i0data[i1+x1.size()*(i3)];
738 }
739 }
740 }
741 }
742 }
743 {
744 // rdm0 non-merged case
745 if (x1 == x2 && x0 == x3) {
746 std::unique_ptr<double[]> i0data = in(0)->get_block();
747 for (int i2 = 0; i2 != x2.size(); ++i2) {
748 for (int i3 = 0; i3 != x3.size(); ++i3) {
749 odata[i2+x1.size()*(i3+x3.size()*(i3+x0.size()*(i2)))] += 2.0 * i0data[0];
750 }
751 }
752 }
753 }
754 {
755 if (x0 == x3) {
756 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
757 for (int i2 = 0; i2 != x2.size(); ++i2) {
758 for (int i3 = 0; i3 != x3.size(); ++i3) {
759 for (int i1 = 0; i1 != x1.size(); ++i1) {
760 odata[i1+x1.size()*(i3+x3.size()*(i3+x0.size()*(i2)))]
761 += (-1.0) * i0data[i1+x1.size()*(i2)];
762 }
763 }
764 }
765 }
766 }
767 {
768 if (x1 == x2) {
769 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x3);
770 for (int i2 = 0; i2 != x2.size(); ++i2) {
771 for (int i0 = 0; i0 != x0.size(); ++i0) {
772 for (int i3 = 0; i3 != x3.size(); ++i3) {
773 odata[i2+x1.size()*(i3+x3.size()*(i0+x0.size()*(i2)))]
774 += (-1.0) * i0data[i0+x0.size()*(i3)];
775 }
776 }
777 }
778 }
779 }
780 {
781 if (x1 == x3) {
782 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
783 for (int i2 = 0; i2 != x2.size(); ++i2) {
784 for (int i0 = 0; i0 != x0.size(); ++i0) {
785 for (int i3 = 0; i3 != x3.size(); ++i3) {
786 odata[i3+x1.size()*(i3+x3.size()*(i0+x0.size()*(i2)))]
787 += (2.0) * i0data[i0+x0.size()*(i2)];
788 }
789 }
790 }
791 }
792 }
793 {
794 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x3, x0, x2);
795 sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x1.size(), x3.size(), x0.size(), x2.size());
796 }
797 out()->add_block(odata, x1, x3, x0, x2);
798 }
799
compute()800 void Task4::Task_local::compute() {
801 const Index x2 = b(0);
802 const Index x5 = b(1);
803 const Index x3 = b(2);
804 const Index x4 = b(3);
805 const Index x1 = b(4);
806 const Index x0 = b(5);
807 // tensor label: Gamma4
808 std::unique_ptr<double[]> odata(new double[out()->get_size(x2, x5, x3, x4, x1, x0)]);
809 std::fill_n(odata.get(), out()->get_size(x2, x5, x3, x4, x1, x0), 0.0);
810 {
811 if (x2 == x5 && x1 == x4) {
812 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
813 for (int i0 = 0; i0 != x0.size(); ++i0) {
814 for (int i4 = 0; i4 != x4.size(); ++i4) {
815 for (int i3 = 0; i3 != x3.size(); ++i3) {
816 for (int i5 = 0; i5 != x5.size(); ++i5) {
817 odata[i5+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
818 += (-2.0) * i0data[i3+x3.size()*(i0)];
819 }
820 }
821 }
822 }
823 }
824 }
825 {
826 if (x2 == x4 && x1 == x5) {
827 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
828 for (int i0 = 0; i0 != x0.size(); ++i0) {
829 for (int i4 = 0; i4 != x4.size(); ++i4) {
830 for (int i3 = 0; i3 != x3.size(); ++i3) {
831 for (int i5 = 0; i5 != x5.size(); ++i5) {
832 odata[i4+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i5+x1.size()*(i0)))))]
833 += (1.0) * i0data[i3+x3.size()*(i0)];
834 }
835 }
836 }
837 }
838 }
839 }
840 {
841 if (x3 == x5 && x1 == x4) {
842 std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
843 for (int i0 = 0; i0 != x0.size(); ++i0) {
844 for (int i4 = 0; i4 != x4.size(); ++i4) {
845 for (int i5 = 0; i5 != x5.size(); ++i5) {
846 for (int i2 = 0; i2 != x2.size(); ++i2) {
847 odata[i2+x2.size()*(i5+x5.size()*(i5+x3.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
848 += (1.0) * i0data[i2+x2.size()*(i0)];
849 }
850 }
851 }
852 }
853 }
854 }
855 {
856 if (x1 == x4) {
857 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x5, x3, x0);
858 for (int i0 = 0; i0 != x0.size(); ++i0) {
859 for (int i4 = 0; i4 != x4.size(); ++i4) {
860 for (int i3 = 0; i3 != x3.size(); ++i3) {
861 for (int i5 = 0; i5 != x5.size(); ++i5) {
862 for (int i2 = 0; i2 != x2.size(); ++i2) {
863 odata[i2+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
864 += (1.0) * i0data[i2+x2.size()*(i5+x5.size()*(i3+x3.size()*(i0)))];
865 }
866 }
867 }
868 }
869 }
870 }
871 }
872 {
873 if (x3 == x4 && x1 == x5) {
874 std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
875 for (int i0 = 0; i0 != x0.size(); ++i0) {
876 for (int i4 = 0; i4 != x4.size(); ++i4) {
877 for (int i5 = 0; i5 != x5.size(); ++i5) {
878 for (int i2 = 0; i2 != x2.size(); ++i2) {
879 odata[i2+x2.size()*(i5+x5.size()*(i4+x3.size()*(i4+x4.size()*(i5+x1.size()*(i0)))))]
880 += (-2.0) * i0data[i2+x2.size()*(i0)];
881 }
882 }
883 }
884 }
885 }
886 }
887 {
888 if (x1 == x5) {
889 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4, x2, x0);
890 for (int i0 = 0; i0 != x0.size(); ++i0) {
891 for (int i4 = 0; i4 != x4.size(); ++i4) {
892 for (int i3 = 0; i3 != x3.size(); ++i3) {
893 for (int i5 = 0; i5 != x5.size(); ++i5) {
894 for (int i2 = 0; i2 != x2.size(); ++i2) {
895 odata[i2+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i5+x1.size()*(i0)))))]
896 += (1.0) * i0data[i3+x3.size()*(i4+x4.size()*(i2+x2.size()*(i0)))];
897 }
898 }
899 }
900 }
901 }
902 }
903 }
904 {
905 if (x3 == x5 && x2 == x4) {
906 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
907 for (int i0 = 0; i0 != x0.size(); ++i0) {
908 for (int i1 = 0; i1 != x1.size(); ++i1) {
909 for (int i4 = 0; i4 != x4.size(); ++i4) {
910 for (int i5 = 0; i5 != x5.size(); ++i5) {
911 odata[i4+x2.size()*(i5+x5.size()*(i5+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
912 += (-2.0) * i0data[i1+x1.size()*(i0)];
913 }
914 }
915 }
916 }
917 }
918 }
919 {
920 if (x2 == x4) {
921 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x5, x1, x0);
922 for (int i0 = 0; i0 != x0.size(); ++i0) {
923 for (int i1 = 0; i1 != x1.size(); ++i1) {
924 for (int i4 = 0; i4 != x4.size(); ++i4) {
925 for (int i3 = 0; i3 != x3.size(); ++i3) {
926 for (int i5 = 0; i5 != x5.size(); ++i5) {
927 odata[i4+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
928 += (1.0) * i0data[i3+x3.size()*(i5+x5.size()*(i1+x1.size()*(i0)))];
929 }
930 }
931 }
932 }
933 }
934 }
935 }
936 {
937 if (x3 == x4 && x2 == x5) {
938 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
939 for (int i0 = 0; i0 != x0.size(); ++i0) {
940 for (int i1 = 0; i1 != x1.size(); ++i1) {
941 for (int i4 = 0; i4 != x4.size(); ++i4) {
942 for (int i5 = 0; i5 != x5.size(); ++i5) {
943 odata[i5+x2.size()*(i5+x5.size()*(i4+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
944 += (4.0) * i0data[i1+x1.size()*(i0)];
945 }
946 }
947 }
948 }
949 }
950 }
951 {
952 if (x2 == x5) {
953 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4, x1, x0);
954 for (int i0 = 0; i0 != x0.size(); ++i0) {
955 for (int i1 = 0; i1 != x1.size(); ++i1) {
956 for (int i4 = 0; i4 != x4.size(); ++i4) {
957 for (int i3 = 0; i3 != x3.size(); ++i3) {
958 for (int i5 = 0; i5 != x5.size(); ++i5) {
959 odata[i5+x2.size()*(i5+x5.size()*(i3+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
960 += (-2.0) * i0data[i3+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
961 }
962 }
963 }
964 }
965 }
966 }
967 }
968 {
969 if (x3 == x4) {
970 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x5, x1, x0);
971 for (int i0 = 0; i0 != x0.size(); ++i0) {
972 for (int i1 = 0; i1 != x1.size(); ++i1) {
973 for (int i4 = 0; i4 != x4.size(); ++i4) {
974 for (int i5 = 0; i5 != x5.size(); ++i5) {
975 for (int i2 = 0; i2 != x2.size(); ++i2) {
976 odata[i2+x2.size()*(i5+x5.size()*(i4+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
977 += (-2.0) * i0data[i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))];
978 }
979 }
980 }
981 }
982 }
983 }
984 }
985 {
986 if (x3 == x5) {
987 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x4, x1, x0);
988 for (int i0 = 0; i0 != x0.size(); ++i0) {
989 for (int i1 = 0; i1 != x1.size(); ++i1) {
990 for (int i4 = 0; i4 != x4.size(); ++i4) {
991 for (int i5 = 0; i5 != x5.size(); ++i5) {
992 for (int i2 = 0; i2 != x2.size(); ++i2) {
993 odata[i2+x2.size()*(i5+x5.size()*(i5+x3.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
994 += (1.0) * i0data[i2+x2.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
995 }
996 }
997 }
998 }
999 }
1000 }
1001 }
1002 {
1003 std::unique_ptr<double[]> i0data = in(2)->get_block(x2, x5, x3, x4, x1, x0);
1004 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x2.size(), x5.size(), x3.size(), x4.size(), x1.size(), x0.size());
1005 }
1006 out()->add_block(odata, x2, x5, x3, x4, x1, x0);
1007 }
1008
compute()1009 void Task5::Task_local::compute() {
1010 const Index x7 = b(0);
1011 const Index x6 = b(1);
1012 const Index x2 = b(2);
1013 const Index x5 = b(3);
1014 const Index x1 = b(4);
1015 const Index x0 = b(5);
1016 const Index x4 = b(6);
1017 const Index x3 = b(7);
1018 // tensor label: Gamma5
1019 std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x6, x2, x5, x1, x0)]);
1020 std::fill_n(odata.get(), out()->get_size(x7, x6, x2, x5, x1, x0), 0.0);
1021 // associated with merged
1022 std::unique_ptr<double[]> fdata = in(4)->get_block(x4, x3);
1023 if (x2 == x6 && x1 == x5) {
1024 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x4, x3);
1025 for (int i3 = 0; i3 != x3.size(); ++i3) {
1026 for (int i4 = 0; i4 != x4.size(); ++i4) {
1027 for (int i0 = 0; i0 != x0.size(); ++i0) {
1028 for (int i7 = 0; i7 != x7.size(); ++i7) {
1029 for (int i6 = 0; i6 != x6.size(); ++i6) {
1030 for (int i5 = 0; i5 != x5.size(); ++i5) {
1031 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
1032 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i4+x4.size()*(i3)))] * fdata[i4+x4.size()*(i3)];
1033 }
1034 }
1035 }
1036 }
1037 }
1038 }
1039 }
1040 if (x2 == x5 && x1 == x6) {
1041 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x4, x3);
1042 for (int i3 = 0; i3 != x3.size(); ++i3) {
1043 for (int i4 = 0; i4 != x4.size(); ++i4) {
1044 for (int i0 = 0; i0 != x0.size(); ++i0) {
1045 for (int i7 = 0; i7 != x7.size(); ++i7) {
1046 for (int i5 = 0; i5 != x5.size(); ++i5) {
1047 for (int i6 = 0; i6 != x6.size(); ++i6) {
1048 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
1049 += (2.0) * i0data[i7+x7.size()*(i0+x0.size()*(i4+x4.size()*(i3)))] * fdata[i4+x4.size()*(i3)];
1050 }
1051 }
1052 }
1053 }
1054 }
1055 }
1056 }
1057 if (x2 == x5 && x1 == x3 && x4 == x6) {
1058 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
1059 for (int i0 = 0; i0 != x0.size(); ++i0) {
1060 for (int i7 = 0; i7 != x7.size(); ++i7) {
1061 for (int i5 = 0; i5 != x5.size(); ++i5) {
1062 for (int i3 = 0; i3 != x3.size(); ++i3) {
1063 for (int i6 = 0; i6 != x6.size(); ++i6) {
1064 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1065 += (2.0) * i0data[i7+x7.size()*(i0)] * fdata[i6+x4.size()*(i3)];
1066 }
1067 }
1068 }
1069 }
1070 }
1071 }
1072 if (x2 == x5 && x1 == x3) {
1073 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x4, x0);
1074 for (int i0 = 0; i0 != x0.size(); ++i0) {
1075 for (int i4 = 0; i4 != x4.size(); ++i4) {
1076 for (int i6 = 0; i6 != x6.size(); ++i6) {
1077 for (int i7 = 0; i7 != x7.size(); ++i7) {
1078 for (int i5 = 0; i5 != x5.size(); ++i5) {
1079 for (int i3 = 0; i3 != x3.size(); ++i3) {
1080 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1081 += (2.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i0)))] * fdata[i4+x4.size()*(i3)];
1082 }
1083 }
1084 }
1085 }
1086 }
1087 }
1088 }
1089 if (x4 == x5 && x2 == x6 && x1 == x3) {
1090 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
1091 for (int i0 = 0; i0 != x0.size(); ++i0) {
1092 for (int i7 = 0; i7 != x7.size(); ++i7) {
1093 for (int i5 = 0; i5 != x5.size(); ++i5) {
1094 for (int i6 = 0; i6 != x6.size(); ++i6) {
1095 for (int i3 = 0; i3 != x3.size(); ++i3) {
1096 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1097 += (-1.0) * i0data[i7+x7.size()*(i0)] * fdata[i5+x4.size()*(i3)];
1098 }
1099 }
1100 }
1101 }
1102 }
1103 }
1104 if (x2 == x6 && x1 == x3) {
1105 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x5, x4, x0);
1106 for (int i0 = 0; i0 != x0.size(); ++i0) {
1107 for (int i4 = 0; i4 != x4.size(); ++i4) {
1108 for (int i5 = 0; i5 != x5.size(); ++i5) {
1109 for (int i7 = 0; i7 != x7.size(); ++i7) {
1110 for (int i6 = 0; i6 != x6.size(); ++i6) {
1111 for (int i3 = 0; i3 != x3.size(); ++i3) {
1112 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1113 += (-1.0) * i0data[i7+x7.size()*(i5+x5.size()*(i4+x4.size()*(i0)))] * fdata[i4+x4.size()*(i3)];
1114 }
1115 }
1116 }
1117 }
1118 }
1119 }
1120 }
1121 if (x4 == x5 && x1 == x3) {
1122 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x2, x0);
1123 for (int i0 = 0; i0 != x0.size(); ++i0) {
1124 for (int i2 = 0; i2 != x2.size(); ++i2) {
1125 for (int i6 = 0; i6 != x6.size(); ++i6) {
1126 for (int i7 = 0; i7 != x7.size(); ++i7) {
1127 for (int i5 = 0; i5 != x5.size(); ++i5) {
1128 for (int i3 = 0; i3 != x3.size(); ++i3) {
1129 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1130 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i0)))] * fdata[i5+x4.size()*(i3)];
1131 }
1132 }
1133 }
1134 }
1135 }
1136 }
1137 }
1138 if (x4 == x6 && x1 == x3) {
1139 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x2, x5);
1140 for (int i5 = 0; i5 != x5.size(); ++i5) {
1141 for (int i2 = 0; i2 != x2.size(); ++i2) {
1142 for (int i0 = 0; i0 != x0.size(); ++i0) {
1143 for (int i7 = 0; i7 != x7.size(); ++i7) {
1144 for (int i6 = 0; i6 != x6.size(); ++i6) {
1145 for (int i3 = 0; i3 != x3.size(); ++i3) {
1146 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1147 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i5)))] * fdata[i6+x4.size()*(i3)];
1148 }
1149 }
1150 }
1151 }
1152 }
1153 }
1154 }
1155 if (x1 == x3) {
1156 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x2, x5, x4, x0);
1157 for (int i0 = 0; i0 != x0.size(); ++i0) {
1158 for (int i4 = 0; i4 != x4.size(); ++i4) {
1159 for (int i5 = 0; i5 != x5.size(); ++i5) {
1160 for (int i2 = 0; i2 != x2.size(); ++i2) {
1161 for (int i6 = 0; i6 != x6.size(); ++i6) {
1162 for (int i7 = 0; i7 != x7.size(); ++i7) {
1163 for (int i3 = 0; i3 != x3.size(); ++i3) {
1164 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i3+x1.size()*(i0)))))]
1165 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i0)))))] * fdata[i4+x4.size()*(i3)];
1166 }
1167 }
1168 }
1169 }
1170 }
1171 }
1172 }
1173 }
1174 if (x4 == x6 && x2 == x3 && x1 == x5) {
1175 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
1176 for (int i0 = 0; i0 != x0.size(); ++i0) {
1177 for (int i7 = 0; i7 != x7.size(); ++i7) {
1178 for (int i6 = 0; i6 != x6.size(); ++i6) {
1179 for (int i3 = 0; i3 != x3.size(); ++i3) {
1180 for (int i5 = 0; i5 != x5.size(); ++i5) {
1181 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
1182 += (-1.0) * i0data[i7+x7.size()*(i0)] * fdata[i6+x4.size()*(i3)];
1183 }
1184 }
1185 }
1186 }
1187 }
1188 }
1189 if (x2 == x3 && x1 == x5) {
1190 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x4, x0);
1191 for (int i0 = 0; i0 != x0.size(); ++i0) {
1192 for (int i4 = 0; i4 != x4.size(); ++i4) {
1193 for (int i6 = 0; i6 != x6.size(); ++i6) {
1194 for (int i7 = 0; i7 != x7.size(); ++i7) {
1195 for (int i3 = 0; i3 != x3.size(); ++i3) {
1196 for (int i5 = 0; i5 != x5.size(); ++i5) {
1197 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
1198 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i0)))] * fdata[i4+x4.size()*(i3)];
1199 }
1200 }
1201 }
1202 }
1203 }
1204 }
1205 }
1206 if (x4 == x6 && x1 == x5) {
1207 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x2, x0);
1208 for (int i0 = 0; i0 != x0.size(); ++i0) {
1209 for (int i2 = 0; i2 != x2.size(); ++i2) {
1210 for (int i3 = 0; i3 != x3.size(); ++i3) {
1211 for (int i7 = 0; i7 != x7.size(); ++i7) {
1212 for (int i6 = 0; i6 != x6.size(); ++i6) {
1213 for (int i5 = 0; i5 != x5.size(); ++i5) {
1214 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
1215 += (-1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i2+x2.size()*(i0)))] * fdata[i6+x4.size()*(i3)];
1216 }
1217 }
1218 }
1219 }
1220 }
1221 }
1222 }
1223 if (x1 == x5) {
1224 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x4, x3, x2, x0);
1225 for (int i0 = 0; i0 != x0.size(); ++i0) {
1226 for (int i2 = 0; i2 != x2.size(); ++i2) {
1227 for (int i3 = 0; i3 != x3.size(); ++i3) {
1228 for (int i4 = 0; i4 != x4.size(); ++i4) {
1229 for (int i6 = 0; i6 != x6.size(); ++i6) {
1230 for (int i7 = 0; i7 != x7.size(); ++i7) {
1231 for (int i5 = 0; i5 != x5.size(); ++i5) {
1232 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i5+x1.size()*(i0)))))]
1233 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))] * fdata[i4+x4.size()*(i3)];
1234 }
1235 }
1236 }
1237 }
1238 }
1239 }
1240 }
1241 }
1242 if (x4 == x5 && x2 == x3 && x1 == x6) {
1243 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
1244 for (int i0 = 0; i0 != x0.size(); ++i0) {
1245 for (int i7 = 0; i7 != x7.size(); ++i7) {
1246 for (int i5 = 0; i5 != x5.size(); ++i5) {
1247 for (int i3 = 0; i3 != x3.size(); ++i3) {
1248 for (int i6 = 0; i6 != x6.size(); ++i6) {
1249 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
1250 += (2.0) * i0data[i7+x7.size()*(i0)] * fdata[i5+x4.size()*(i3)];
1251 }
1252 }
1253 }
1254 }
1255 }
1256 }
1257 if (x2 == x3 && x1 == x6) {
1258 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x4, x5);
1259 for (int i5 = 0; i5 != x5.size(); ++i5) {
1260 for (int i4 = 0; i4 != x4.size(); ++i4) {
1261 for (int i0 = 0; i0 != x0.size(); ++i0) {
1262 for (int i7 = 0; i7 != x7.size(); ++i7) {
1263 for (int i3 = 0; i3 != x3.size(); ++i3) {
1264 for (int i6 = 0; i6 != x6.size(); ++i6) {
1265 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
1266 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i4+x4.size()*(i5)))] * fdata[i4+x4.size()*(i3)];
1267 }
1268 }
1269 }
1270 }
1271 }
1272 }
1273 }
1274 if (x4 == x5 && x1 == x6) {
1275 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x2, x3);
1276 for (int i3 = 0; i3 != x3.size(); ++i3) {
1277 for (int i2 = 0; i2 != x2.size(); ++i2) {
1278 for (int i0 = 0; i0 != x0.size(); ++i0) {
1279 for (int i7 = 0; i7 != x7.size(); ++i7) {
1280 for (int i5 = 0; i5 != x5.size(); ++i5) {
1281 for (int i6 = 0; i6 != x6.size(); ++i6) {
1282 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
1283 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i3)))] * fdata[i5+x4.size()*(i3)];
1284 }
1285 }
1286 }
1287 }
1288 }
1289 }
1290 }
1291 if (x1 == x6) {
1292 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x0, x2, x5, x4, x3);
1293 for (int i3 = 0; i3 != x3.size(); ++i3) {
1294 for (int i4 = 0; i4 != x4.size(); ++i4) {
1295 for (int i5 = 0; i5 != x5.size(); ++i5) {
1296 for (int i2 = 0; i2 != x2.size(); ++i2) {
1297 for (int i0 = 0; i0 != x0.size(); ++i0) {
1298 for (int i7 = 0; i7 != x7.size(); ++i7) {
1299 for (int i6 = 0; i6 != x6.size(); ++i6) {
1300 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i6+x1.size()*(i0)))))]
1301 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3)))))] * fdata[i4+x4.size()*(i3)];
1302 }
1303 }
1304 }
1305 }
1306 }
1307 }
1308 }
1309 }
1310 if (x4 == x5 && x2 == x3) {
1311 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x1, x0);
1312 for (int i0 = 0; i0 != x0.size(); ++i0) {
1313 for (int i1 = 0; i1 != x1.size(); ++i1) {
1314 for (int i6 = 0; i6 != x6.size(); ++i6) {
1315 for (int i7 = 0; i7 != x7.size(); ++i7) {
1316 for (int i5 = 0; i5 != x5.size(); ++i5) {
1317 for (int i3 = 0; i3 != x3.size(); ++i3) {
1318 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1319 += (2.0) * i0data[i7+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))] * fdata[i5+x4.size()*(i3)];
1320 }
1321 }
1322 }
1323 }
1324 }
1325 }
1326 }
1327 if (x4 == x6 && x2 == x3) {
1328 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x5, x1, x0);
1329 for (int i0 = 0; i0 != x0.size(); ++i0) {
1330 for (int i1 = 0; i1 != x1.size(); ++i1) {
1331 for (int i5 = 0; i5 != x5.size(); ++i5) {
1332 for (int i7 = 0; i7 != x7.size(); ++i7) {
1333 for (int i6 = 0; i6 != x6.size(); ++i6) {
1334 for (int i3 = 0; i3 != x3.size(); ++i3) {
1335 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1336 += (-1.0) * i0data[i7+x7.size()*(i5+x5.size()*(i1+x1.size()*(i0)))] * fdata[i6+x4.size()*(i3)];
1337 }
1338 }
1339 }
1340 }
1341 }
1342 }
1343 }
1344 if (x2 == x3) {
1345 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x4, x5, x1, x0);
1346 for (int i0 = 0; i0 != x0.size(); ++i0) {
1347 for (int i1 = 0; i1 != x1.size(); ++i1) {
1348 for (int i5 = 0; i5 != x5.size(); ++i5) {
1349 for (int i4 = 0; i4 != x4.size(); ++i4) {
1350 for (int i6 = 0; i6 != x6.size(); ++i6) {
1351 for (int i7 = 0; i7 != x7.size(); ++i7) {
1352 for (int i3 = 0; i3 != x3.size(); ++i3) {
1353 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1354 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i4+x4.size()*(i3)];
1355 }
1356 }
1357 }
1358 }
1359 }
1360 }
1361 }
1362 }
1363 if (x4 == x6 && x2 == x5) {
1364 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x1, x0);
1365 for (int i0 = 0; i0 != x0.size(); ++i0) {
1366 for (int i1 = 0; i1 != x1.size(); ++i1) {
1367 for (int i3 = 0; i3 != x3.size(); ++i3) {
1368 for (int i7 = 0; i7 != x7.size(); ++i7) {
1369 for (int i6 = 0; i6 != x6.size(); ++i6) {
1370 for (int i5 = 0; i5 != x5.size(); ++i5) {
1371 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1372 += (2.0) * i0data[i7+x7.size()*(i3+x3.size()*(i1+x1.size()*(i0)))] * fdata[i6+x4.size()*(i3)];
1373 }
1374 }
1375 }
1376 }
1377 }
1378 }
1379 }
1380 if (x2 == x5) {
1381 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x4, x3, x1, x0);
1382 for (int i0 = 0; i0 != x0.size(); ++i0) {
1383 for (int i1 = 0; i1 != x1.size(); ++i1) {
1384 for (int i3 = 0; i3 != x3.size(); ++i3) {
1385 for (int i4 = 0; i4 != x4.size(); ++i4) {
1386 for (int i6 = 0; i6 != x6.size(); ++i6) {
1387 for (int i7 = 0; i7 != x7.size(); ++i7) {
1388 for (int i5 = 0; i5 != x5.size(); ++i5) {
1389 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1390 += (2.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i4+x4.size()*(i3)];
1391 }
1392 }
1393 }
1394 }
1395 }
1396 }
1397 }
1398 }
1399 if (x4 == x5 && x2 == x6) {
1400 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x1, x0);
1401 for (int i0 = 0; i0 != x0.size(); ++i0) {
1402 for (int i1 = 0; i1 != x1.size(); ++i1) {
1403 for (int i3 = 0; i3 != x3.size(); ++i3) {
1404 for (int i7 = 0; i7 != x7.size(); ++i7) {
1405 for (int i5 = 0; i5 != x5.size(); ++i5) {
1406 for (int i6 = 0; i6 != x6.size(); ++i6) {
1407 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1408 += (-1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i1+x1.size()*(i0)))] * fdata[i5+x4.size()*(i3)];
1409 }
1410 }
1411 }
1412 }
1413 }
1414 }
1415 }
1416 if (x2 == x6) {
1417 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x5, x4, x3, x1, x0);
1418 for (int i0 = 0; i0 != x0.size(); ++i0) {
1419 for (int i1 = 0; i1 != x1.size(); ++i1) {
1420 for (int i3 = 0; i3 != x3.size(); ++i3) {
1421 for (int i4 = 0; i4 != x4.size(); ++i4) {
1422 for (int i5 = 0; i5 != x5.size(); ++i5) {
1423 for (int i7 = 0; i7 != x7.size(); ++i7) {
1424 for (int i6 = 0; i6 != x6.size(); ++i6) {
1425 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1426 += (-1.0) * i0data[i7+x7.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i4+x4.size()*(i3)];
1427 }
1428 }
1429 }
1430 }
1431 }
1432 }
1433 }
1434 }
1435 if (x4 == x5) {
1436 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x2, x3, x1, x0);
1437 for (int i0 = 0; i0 != x0.size(); ++i0) {
1438 for (int i1 = 0; i1 != x1.size(); ++i1) {
1439 for (int i3 = 0; i3 != x3.size(); ++i3) {
1440 for (int i2 = 0; i2 != x2.size(); ++i2) {
1441 for (int i6 = 0; i6 != x6.size(); ++i6) {
1442 for (int i7 = 0; i7 != x7.size(); ++i7) {
1443 for (int i5 = 0; i5 != x5.size(); ++i5) {
1444 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1445 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))] * fdata[i5+x4.size()*(i3)];
1446 }
1447 }
1448 }
1449 }
1450 }
1451 }
1452 }
1453 }
1454 if (x4 == x6) {
1455 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x3, x2, x5, x1, x0);
1456 for (int i0 = 0; i0 != x0.size(); ++i0) {
1457 for (int i1 = 0; i1 != x1.size(); ++i1) {
1458 for (int i5 = 0; i5 != x5.size(); ++i5) {
1459 for (int i2 = 0; i2 != x2.size(); ++i2) {
1460 for (int i3 = 0; i3 != x3.size(); ++i3) {
1461 for (int i7 = 0; i7 != x7.size(); ++i7) {
1462 for (int i6 = 0; i6 != x6.size(); ++i6) {
1463 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1464 += (-1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))] * fdata[i6+x4.size()*(i3)];
1465 }
1466 }
1467 }
1468 }
1469 }
1470 }
1471 }
1472 }
1473 {
1474 std::unique_ptr<double[]> i0data = in(3)->get_block(x7, x6, x2, x5, x1, x0);
1475 for (int i0 = 0; i0 != x0.size(); ++i0) {
1476 for (int i1 = 0; i1 != x1.size(); ++i1) {
1477 for (int i5 = 0; i5 != x5.size(); ++i5) {
1478 for (int i2 = 0; i2 != x2.size(); ++i2) {
1479 for (int i6 = 0; i6 != x6.size(); ++i6) {
1480 for (int i7 = 0; i7 != x7.size(); ++i7) {
1481 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))]
1482 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))];
1483 }
1484 }
1485 }
1486 }
1487 }
1488 }
1489 }
1490 out()->add_block(odata, x7, x6, x2, x5, x1, x0);
1491 }
1492
compute()1493 void Task6::Task_local::compute() {
1494 const Index x5 = b(0);
1495 const Index x4 = b(1);
1496 const Index x2 = b(2);
1497 const Index x3 = b(3);
1498 const Index x1 = b(4);
1499 const Index x0 = b(5);
1500 // tensor label: Gamma6
1501 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x2, x3, x1, x0)]);
1502 std::fill_n(odata.get(), out()->get_size(x5, x4, x2, x3, x1, x0), 0.0);
1503 {
1504 if (x2 == x4 && x1 == x3) {
1505 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
1506 for (int i0 = 0; i0 != x0.size(); ++i0) {
1507 for (int i3 = 0; i3 != x3.size(); ++i3) {
1508 for (int i4 = 0; i4 != x4.size(); ++i4) {
1509 for (int i5 = 0; i5 != x5.size(); ++i5) {
1510 odata[i5+x5.size()*(i4+x4.size()*(i4+x2.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
1511 += (-1.0) * i0data[i5+x5.size()*(i0)];
1512 }
1513 }
1514 }
1515 }
1516 }
1517 }
1518 {
1519 if (x1 == x3) {
1520 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x2, x0);
1521 for (int i0 = 0; i0 != x0.size(); ++i0) {
1522 for (int i3 = 0; i3 != x3.size(); ++i3) {
1523 for (int i2 = 0; i2 != x2.size(); ++i2) {
1524 for (int i4 = 0; i4 != x4.size(); ++i4) {
1525 for (int i5 = 0; i5 != x5.size(); ++i5) {
1526 odata[i5+x5.size()*(i4+x4.size()*(i2+x2.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
1527 += (-1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i2+x2.size()*(i0)))];
1528 }
1529 }
1530 }
1531 }
1532 }
1533 }
1534 }
1535 {
1536 if (x2 == x3 && x1 == x4) {
1537 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
1538 for (int i0 = 0; i0 != x0.size(); ++i0) {
1539 for (int i3 = 0; i3 != x3.size(); ++i3) {
1540 for (int i4 = 0; i4 != x4.size(); ++i4) {
1541 for (int i5 = 0; i5 != x5.size(); ++i5) {
1542 odata[i5+x5.size()*(i4+x4.size()*(i3+x2.size()*(i3+x3.size()*(i4+x1.size()*(i0)))))]
1543 += (2.0) * i0data[i5+x5.size()*(i0)];
1544 }
1545 }
1546 }
1547 }
1548 }
1549 }
1550 {
1551 if (x1 == x4) {
1552 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x2, x3);
1553 for (int i0 = 0; i0 != x0.size(); ++i0) {
1554 for (int i3 = 0; i3 != x3.size(); ++i3) {
1555 for (int i2 = 0; i2 != x2.size(); ++i2) {
1556 for (int i4 = 0; i4 != x4.size(); ++i4) {
1557 for (int i5 = 0; i5 != x5.size(); ++i5) {
1558 odata[i5+x5.size()*(i4+x4.size()*(i2+x2.size()*(i3+x3.size()*(i4+x1.size()*(i0)))))]
1559 += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i2+x2.size()*(i3)))];
1560 }
1561 }
1562 }
1563 }
1564 }
1565 }
1566 }
1567 {
1568 if (x2 == x3) {
1569 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x0);
1570 for (int i0 = 0; i0 != x0.size(); ++i0) {
1571 for (int i1 = 0; i1 != x1.size(); ++i1) {
1572 for (int i3 = 0; i3 != x3.size(); ++i3) {
1573 for (int i4 = 0; i4 != x4.size(); ++i4) {
1574 for (int i5 = 0; i5 != x5.size(); ++i5) {
1575 odata[i5+x5.size()*(i4+x4.size()*(i3+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
1576 += (2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
1577 }
1578 }
1579 }
1580 }
1581 }
1582 }
1583 }
1584 {
1585 if (x2 == x4) {
1586 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x1, x0);
1587 for (int i0 = 0; i0 != x0.size(); ++i0) {
1588 for (int i1 = 0; i1 != x1.size(); ++i1) {
1589 for (int i3 = 0; i3 != x3.size(); ++i3) {
1590 for (int i4 = 0; i4 != x4.size(); ++i4) {
1591 for (int i5 = 0; i5 != x5.size(); ++i5) {
1592 odata[i5+x5.size()*(i4+x4.size()*(i4+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
1593 += (-1.0) * i0data[i5+x5.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
1594 }
1595 }
1596 }
1597 }
1598 }
1599 }
1600 }
1601 {
1602 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x2, x3, x1, x0);
1603 sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x5.size(), x4.size(), x2.size(), x3.size(), x1.size(), x0.size());
1604 }
1605 out()->add_block(odata, x5, x4, x2, x3, x1, x0);
1606 }
1607
compute()1608 void Task7::Task_local::compute() {
1609 const Index x2 = b(0);
1610 const Index x3 = b(1);
1611 const Index x1 = b(2);
1612 const Index x0 = b(3);
1613 // tensor label: Gamma7
1614 std::unique_ptr<double[]> odata(new double[out()->get_size(x2, x3, x1, x0)]);
1615 std::fill_n(odata.get(), out()->get_size(x2, x3, x1, x0), 0.0);
1616 {
1617 if (x1 == x3) {
1618 std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
1619 for (int i0 = 0; i0 != x0.size(); ++i0) {
1620 for (int i3 = 0; i3 != x3.size(); ++i3) {
1621 for (int i2 = 0; i2 != x2.size(); ++i2) {
1622 odata[i2+x2.size()*(i3+x3.size()*(i3+x1.size()*(i0)))]
1623 += (-1.0) * i0data[i2+x2.size()*(i0)];
1624 }
1625 }
1626 }
1627 }
1628 }
1629 {
1630 if (x2 == x3) {
1631 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
1632 for (int i0 = 0; i0 != x0.size(); ++i0) {
1633 for (int i1 = 0; i1 != x1.size(); ++i1) {
1634 for (int i3 = 0; i3 != x3.size(); ++i3) {
1635 odata[i3+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))]
1636 += (2.0) * i0data[i1+x1.size()*(i0)];
1637 }
1638 }
1639 }
1640 }
1641 }
1642 {
1643 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x3, x1, x0);
1644 sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x2.size(), x3.size(), x1.size(), x0.size());
1645 }
1646 out()->add_block(odata, x2, x3, x1, x0);
1647 }
1648
compute()1649 void Task8::Task_local::compute() {
1650 const Index x5 = b(0);
1651 const Index x3 = b(1);
1652 const Index x2 = b(2);
1653 const Index x4 = b(3);
1654 const Index x1 = b(4);
1655 const Index x0 = b(5);
1656 // tensor label: Gamma9
1657 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x3, x2, x4, x1, x0)]);
1658 std::fill_n(odata.get(), out()->get_size(x5, x3, x2, x4, x1, x0), 0.0);
1659 {
1660 if (x2 == x4 && x1 == x3) {
1661 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
1662 for (int i0 = 0; i0 != x0.size(); ++i0) {
1663 for (int i4 = 0; i4 != x4.size(); ++i4) {
1664 for (int i3 = 0; i3 != x3.size(); ++i3) {
1665 for (int i5 = 0; i5 != x5.size(); ++i5) {
1666 odata[i5+x5.size()*(i3+x3.size()*(i4+x2.size()*(i4+x4.size()*(i3+x1.size()*(i0)))))]
1667 += (-2.0) * i0data[i5+x5.size()*(i0)];
1668 }
1669 }
1670 }
1671 }
1672 }
1673 }
1674 {
1675 if (x1 == x3) {
1676 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x2, x4);
1677 for (int i0 = 0; i0 != x0.size(); ++i0) {
1678 for (int i4 = 0; i4 != x4.size(); ++i4) {
1679 for (int i2 = 0; i2 != x2.size(); ++i2) {
1680 for (int i3 = 0; i3 != x3.size(); ++i3) {
1681 for (int i5 = 0; i5 != x5.size(); ++i5) {
1682 odata[i5+x5.size()*(i3+x3.size()*(i2+x2.size()*(i4+x4.size()*(i3+x1.size()*(i0)))))]
1683 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i2+x2.size()*(i4)))];
1684 }
1685 }
1686 }
1687 }
1688 }
1689 }
1690 }
1691 {
1692 if (x2 == x3 && x1 == x4) {
1693 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
1694 for (int i0 = 0; i0 != x0.size(); ++i0) {
1695 for (int i4 = 0; i4 != x4.size(); ++i4) {
1696 for (int i3 = 0; i3 != x3.size(); ++i3) {
1697 for (int i5 = 0; i5 != x5.size(); ++i5) {
1698 odata[i5+x5.size()*(i3+x3.size()*(i3+x2.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
1699 += (1.0) * i0data[i5+x5.size()*(i0)];
1700 }
1701 }
1702 }
1703 }
1704 }
1705 }
1706 {
1707 if (x1 == x4) {
1708 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x2, x0);
1709 for (int i0 = 0; i0 != x0.size(); ++i0) {
1710 for (int i4 = 0; i4 != x4.size(); ++i4) {
1711 for (int i2 = 0; i2 != x2.size(); ++i2) {
1712 for (int i3 = 0; i3 != x3.size(); ++i3) {
1713 for (int i5 = 0; i5 != x5.size(); ++i5) {
1714 odata[i5+x5.size()*(i3+x3.size()*(i2+x2.size()*(i4+x4.size()*(i4+x1.size()*(i0)))))]
1715 += (1.0) * i0data[i5+x5.size()*(i3+x3.size()*(i2+x2.size()*(i0)))];
1716 }
1717 }
1718 }
1719 }
1720 }
1721 }
1722 }
1723 {
1724 if (x2 == x3) {
1725 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x0);
1726 for (int i0 = 0; i0 != x0.size(); ++i0) {
1727 for (int i1 = 0; i1 != x1.size(); ++i1) {
1728 for (int i4 = 0; i4 != x4.size(); ++i4) {
1729 for (int i3 = 0; i3 != x3.size(); ++i3) {
1730 for (int i5 = 0; i5 != x5.size(); ++i5) {
1731 odata[i5+x5.size()*(i3+x3.size()*(i3+x2.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
1732 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
1733 }
1734 }
1735 }
1736 }
1737 }
1738 }
1739 }
1740 {
1741 if (x2 == x4) {
1742 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x1, x0);
1743 for (int i0 = 0; i0 != x0.size(); ++i0) {
1744 for (int i1 = 0; i1 != x1.size(); ++i1) {
1745 for (int i4 = 0; i4 != x4.size(); ++i4) {
1746 for (int i3 = 0; i3 != x3.size(); ++i3) {
1747 for (int i5 = 0; i5 != x5.size(); ++i5) {
1748 odata[i5+x5.size()*(i3+x3.size()*(i4+x2.size()*(i4+x4.size()*(i1+x1.size()*(i0)))))]
1749 += (-2.0) * i0data[i5+x5.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
1750 }
1751 }
1752 }
1753 }
1754 }
1755 }
1756 }
1757 {
1758 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x3, x2, x4, x1, x0);
1759 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x3.size(), x2.size(), x4.size(), x1.size(), x0.size());
1760 }
1761 out()->add_block(odata, x5, x3, x2, x4, x1, x0);
1762 }
1763
compute()1764 void Task9::Task_local::compute() {
1765 const Index x3 = b(0);
1766 const Index x2 = b(1);
1767 const Index x0 = b(2);
1768 const Index x1 = b(3);
1769 // tensor label: Gamma12
1770 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x2, x0, x1)]);
1771 std::fill_n(odata.get(), out()->get_size(x3, x2, x0, x1), 0.0);
1772 {
1773 if (x0 == x1) {
1774 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x2);
1775 for (int i1 = 0; i1 != x1.size(); ++i1) {
1776 for (int i2 = 0; i2 != x2.size(); ++i2) {
1777 for (int i3 = 0; i3 != x3.size(); ++i3) {
1778 odata[i3+x3.size()*(i2+x2.size()*(i1+x0.size()*(i1)))]
1779 += (2.0) * i0data[i3+x3.size()*(i2)];
1780 }
1781 }
1782 }
1783 }
1784 }
1785 {
1786 if (x0 == x2) {
1787 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x1);
1788 for (int i1 = 0; i1 != x1.size(); ++i1) {
1789 for (int i2 = 0; i2 != x2.size(); ++i2) {
1790 for (int i3 = 0; i3 != x3.size(); ++i3) {
1791 odata[i3+x3.size()*(i2+x2.size()*(i2+x0.size()*(i1)))]
1792 += (-1.0) * i0data[i3+x3.size()*(i1)];
1793 }
1794 }
1795 }
1796 }
1797 }
1798 {
1799 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2, x0, x1);
1800 sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x3.size(), x2.size(), x0.size(), x1.size());
1801 }
1802 out()->add_block(odata, x3, x2, x0, x1);
1803 }
1804
compute()1805 void Task10::Task_local::compute() {
1806 const Index x0 = b(0);
1807 const Index x3 = b(1);
1808 const Index x2 = b(2);
1809 const Index x1 = b(3);
1810 // tensor label: Gamma14
1811 std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x3)]);
1812 std::fill_n(odata.get(), out()->get_size(x0, x3), 0.0);
1813 // associated with merged
1814 std::unique_ptr<double[]> fdata = in(3)->get_block(x2, x1);
1815 if (x0 == x3) {
1816 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x1);
1817 for (int i1 = 0; i1 != x1.size(); ++i1) {
1818 for (int i2 = 0; i2 != x2.size(); ++i2) {
1819 for (int i3 = 0; i3 != x3.size(); ++i3) {
1820 odata[i3+x0.size()*(i3)]
1821 += (2.0) * i0data[i2+x2.size()*(i1)] * fdata[i2+x2.size()*(i1)];
1822 }
1823 }
1824 }
1825 }
1826 // rdm0 merged case
1827 if (x2 == x3 && x0 == x1) {
1828 std::unique_ptr<double[]> i0data = in(0)->get_block();
1829 for (int i3 = 0; i3 != x3.size(); ++i3) {
1830 for (int i1 = 0; i1 != x1.size(); ++i1) {
1831 odata[i1+x0.size()*(i3)] += 2.0 * i0data[0] * fdata[i3+x2.size()*(i1)];
1832 }
1833 }
1834 }
1835 if (x0 == x1) {
1836 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x3);
1837 for (int i3 = 0; i3 != x3.size(); ++i3) {
1838 for (int i2 = 0; i2 != x2.size(); ++i2) {
1839 for (int i1 = 0; i1 != x1.size(); ++i1) {
1840 odata[i1+x0.size()*(i3)]
1841 += (-1.0) * i0data[i2+x2.size()*(i3)] * fdata[i2+x2.size()*(i1)];
1842 }
1843 }
1844 }
1845 }
1846 if (x2 == x3) {
1847 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x1);
1848 for (int i1 = 0; i1 != x1.size(); ++i1) {
1849 for (int i0 = 0; i0 != x0.size(); ++i0) {
1850 for (int i3 = 0; i3 != x3.size(); ++i3) {
1851 odata[i0+x0.size()*(i3)]
1852 += (-1.0) * i0data[i0+x0.size()*(i1)] * fdata[i3+x2.size()*(i1)];
1853 }
1854 }
1855 }
1856 }
1857 {
1858 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x3, x2, x1);
1859 for (int i1 = 0; i1 != x1.size(); ++i1) {
1860 for (int i2 = 0; i2 != x2.size(); ++i2) {
1861 for (int i3 = 0; i3 != x3.size(); ++i3) {
1862 for (int i0 = 0; i0 != x0.size(); ++i0) {
1863 odata[i0+x0.size()*(i3)]
1864 += (-1.0) * i0data[i0+x0.size()*(i3+x3.size()*(i2+x2.size()*(i1)))] * fdata[i2+x2.size()*(i1)];
1865 }
1866 }
1867 }
1868 }
1869 }
1870 out()->add_block(odata, x0, x3);
1871 }
1872
compute()1873 void Task11::Task_local::compute() {
1874 const Index x0 = b(0);
1875 const Index x1 = b(1);
1876 // tensor label: Gamma16
1877 std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x1)]);
1878 std::fill_n(odata.get(), out()->get_size(x0, x1), 0.0);
1879 {
1880 // rdm0 non-merged case
1881 if (x0 == x1) {
1882 std::unique_ptr<double[]> i0data = in(0)->get_block();
1883 for (int i1 = 0; i1 != x1.size(); ++i1) {
1884 odata[i1+x0.size()*(i1)] += 2.0 * i0data[0];
1885 }
1886 }
1887 }
1888 {
1889 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x1);
1890 sort_indices<0,1,1,1,-1,1>(i0data, odata, x0.size(), x1.size());
1891 }
1892 out()->add_block(odata, x0, x1);
1893 }
1894
compute()1895 void Task12::Task_local::compute() {
1896 const Index x3 = b(0);
1897 const Index x1 = b(1);
1898 const Index x0 = b(2);
1899 const Index x2 = b(3);
1900 // tensor label: Gamma22
1901 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x1, x0, x2)]);
1902 std::fill_n(odata.get(), out()->get_size(x3, x1, x0, x2), 0.0);
1903 {
1904 if (x0 == x1) {
1905 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x2);
1906 for (int i2 = 0; i2 != x2.size(); ++i2) {
1907 for (int i1 = 0; i1 != x1.size(); ++i1) {
1908 for (int i3 = 0; i3 != x3.size(); ++i3) {
1909 odata[i3+x3.size()*(i1+x1.size()*(i1+x0.size()*(i2)))]
1910 += (1.0) * i0data[i3+x3.size()*(i2)];
1911 }
1912 }
1913 }
1914 }
1915 }
1916 {
1917 if (x0 == x2) {
1918 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x1);
1919 for (int i2 = 0; i2 != x2.size(); ++i2) {
1920 for (int i1 = 0; i1 != x1.size(); ++i1) {
1921 for (int i3 = 0; i3 != x3.size(); ++i3) {
1922 odata[i3+x3.size()*(i1+x1.size()*(i2+x0.size()*(i2)))]
1923 += (-2.0) * i0data[i3+x3.size()*(i1)];
1924 }
1925 }
1926 }
1927 }
1928 }
1929 {
1930 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x1, x0, x2);
1931 sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x3.size(), x1.size(), x0.size(), x2.size());
1932 }
1933 out()->add_block(odata, x3, x1, x0, x2);
1934 }
1935
compute()1936 void Task13::Task_local::compute() {
1937 const Index x5 = b(0);
1938 const Index x4 = b(1);
1939 const Index x1 = b(2);
1940 const Index x3 = b(3);
1941 const Index x2 = b(4);
1942 const Index x0 = b(5);
1943 // tensor label: Gamma28
1944 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x1, x3, x2, x0)]);
1945 std::fill_n(odata.get(), out()->get_size(x5, x4, x1, x3, x2, x0), 0.0);
1946 {
1947 if (x2 == x4 && x1 == x3) {
1948 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
1949 for (int i0 = 0; i0 != x0.size(); ++i0) {
1950 for (int i3 = 0; i3 != x3.size(); ++i3) {
1951 for (int i4 = 0; i4 != x4.size(); ++i4) {
1952 for (int i5 = 0; i5 != x5.size(); ++i5) {
1953 odata[i5+x5.size()*(i4+x4.size()*(i3+x1.size()*(i3+x3.size()*(i4+x2.size()*(i0)))))]
1954 += (-2.0) * i0data[i5+x5.size()*(i0)];
1955 }
1956 }
1957 }
1958 }
1959 }
1960 }
1961 {
1962 if (x1 == x3) {
1963 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x2, x0);
1964 for (int i0 = 0; i0 != x0.size(); ++i0) {
1965 for (int i2 = 0; i2 != x2.size(); ++i2) {
1966 for (int i3 = 0; i3 != x3.size(); ++i3) {
1967 for (int i4 = 0; i4 != x4.size(); ++i4) {
1968 for (int i5 = 0; i5 != x5.size(); ++i5) {
1969 odata[i5+x5.size()*(i4+x4.size()*(i3+x1.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))]
1970 += (-2.0) * i0data[i5+x5.size()*(i4+x4.size()*(i2+x2.size()*(i0)))];
1971 }
1972 }
1973 }
1974 }
1975 }
1976 }
1977 }
1978 {
1979 if (x2 == x3 && x1 == x4) {
1980 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
1981 for (int i0 = 0; i0 != x0.size(); ++i0) {
1982 for (int i3 = 0; i3 != x3.size(); ++i3) {
1983 for (int i4 = 0; i4 != x4.size(); ++i4) {
1984 for (int i5 = 0; i5 != x5.size(); ++i5) {
1985 odata[i5+x5.size()*(i4+x4.size()*(i4+x1.size()*(i3+x3.size()*(i3+x2.size()*(i0)))))]
1986 += (1.0) * i0data[i5+x5.size()*(i0)];
1987 }
1988 }
1989 }
1990 }
1991 }
1992 }
1993 {
1994 if (x1 == x4) {
1995 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x3, x2, x0);
1996 for (int i0 = 0; i0 != x0.size(); ++i0) {
1997 for (int i2 = 0; i2 != x2.size(); ++i2) {
1998 for (int i3 = 0; i3 != x3.size(); ++i3) {
1999 for (int i4 = 0; i4 != x4.size(); ++i4) {
2000 for (int i5 = 0; i5 != x5.size(); ++i5) {
2001 odata[i5+x5.size()*(i4+x4.size()*(i4+x1.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))]
2002 += (1.0) * i0data[i5+x5.size()*(i3+x3.size()*(i2+x2.size()*(i0)))];
2003 }
2004 }
2005 }
2006 }
2007 }
2008 }
2009 }
2010 {
2011 if (x2 == x3) {
2012 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x1, x0);
2013 for (int i0 = 0; i0 != x0.size(); ++i0) {
2014 for (int i3 = 0; i3 != x3.size(); ++i3) {
2015 for (int i1 = 0; i1 != x1.size(); ++i1) {
2016 for (int i4 = 0; i4 != x4.size(); ++i4) {
2017 for (int i5 = 0; i5 != x5.size(); ++i5) {
2018 odata[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i3+x3.size()*(i3+x2.size()*(i0)))))]
2019 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))];
2020 }
2021 }
2022 }
2023 }
2024 }
2025 }
2026 }
2027 {
2028 if (x2 == x4) {
2029 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x1, x3);
2030 for (int i0 = 0; i0 != x0.size(); ++i0) {
2031 for (int i3 = 0; i3 != x3.size(); ++i3) {
2032 for (int i1 = 0; i1 != x1.size(); ++i1) {
2033 for (int i4 = 0; i4 != x4.size(); ++i4) {
2034 for (int i5 = 0; i5 != x5.size(); ++i5) {
2035 odata[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i3+x3.size()*(i4+x2.size()*(i0)))))]
2036 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i3)))];
2037 }
2038 }
2039 }
2040 }
2041 }
2042 }
2043 }
2044 {
2045 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x1, x3, x2, x0);
2046 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x4.size(), x1.size(), x3.size(), x2.size(), x0.size());
2047 }
2048 out()->add_block(odata, x5, x4, x1, x3, x2, x0);
2049 }
2050
compute()2051 void Task14::Task_local::compute() {
2052 const Index x1 = b(0);
2053 const Index x3 = b(1);
2054 const Index x2 = b(2);
2055 const Index x0 = b(3);
2056 // tensor label: Gamma29
2057 std::unique_ptr<double[]> odata(new double[out()->get_size(x1, x3, x2, x0)]);
2058 std::fill_n(odata.get(), out()->get_size(x1, x3, x2, x0), 0.0);
2059 {
2060 if (x1 == x3) {
2061 std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
2062 for (int i0 = 0; i0 != x0.size(); ++i0) {
2063 for (int i2 = 0; i2 != x2.size(); ++i2) {
2064 for (int i3 = 0; i3 != x3.size(); ++i3) {
2065 odata[i3+x1.size()*(i3+x3.size()*(i2+x2.size()*(i0)))]
2066 += (-2.0) * i0data[i2+x2.size()*(i0)];
2067 }
2068 }
2069 }
2070 }
2071 }
2072 {
2073 if (x2 == x3) {
2074 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
2075 for (int i0 = 0; i0 != x0.size(); ++i0) {
2076 for (int i3 = 0; i3 != x3.size(); ++i3) {
2077 for (int i1 = 0; i1 != x1.size(); ++i1) {
2078 odata[i1+x1.size()*(i3+x3.size()*(i3+x2.size()*(i0)))]
2079 += (1.0) * i0data[i1+x1.size()*(i0)];
2080 }
2081 }
2082 }
2083 }
2084 }
2085 {
2086 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x3, x2, x0);
2087 sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x1.size(), x3.size(), x2.size(), x0.size());
2088 }
2089 out()->add_block(odata, x1, x3, x2, x0);
2090 }
2091
compute()2092 void Task15::Task_local::compute() {
2093 const Index x5 = b(0);
2094 const Index x0 = b(1);
2095 const Index x1 = b(2);
2096 const Index x4 = b(3);
2097 const Index x3 = b(4);
2098 const Index x2 = b(5);
2099 // tensor label: Gamma31
2100 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x1, x4)]);
2101 std::fill_n(odata.get(), out()->get_size(x5, x0, x1, x4), 0.0);
2102 // associated with merged
2103 std::unique_ptr<double[]> fdata = in(3)->get_block(x3, x2);
2104 if (x1 == x4) {
2105 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x2);
2106 for (int i2 = 0; i2 != x2.size(); ++i2) {
2107 for (int i3 = 0; i3 != x3.size(); ++i3) {
2108 for (int i0 = 0; i0 != x0.size(); ++i0) {
2109 for (int i5 = 0; i5 != x5.size(); ++i5) {
2110 for (int i4 = 0; i4 != x4.size(); ++i4) {
2111 odata[i5+x5.size()*(i0+x0.size()*(i4+x1.size()*(i4)))]
2112 += (2.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2)))] * fdata[i3+x3.size()*(i2)];
2113 }
2114 }
2115 }
2116 }
2117 }
2118 }
2119 if (x3 == x4 && x1 == x2) {
2120 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
2121 for (int i0 = 0; i0 != x0.size(); ++i0) {
2122 for (int i5 = 0; i5 != x5.size(); ++i5) {
2123 for (int i4 = 0; i4 != x4.size(); ++i4) {
2124 for (int i2 = 0; i2 != x2.size(); ++i2) {
2125 odata[i5+x5.size()*(i0+x0.size()*(i2+x1.size()*(i4)))]
2126 += (2.0) * i0data[i5+x5.size()*(i0)] * fdata[i4+x3.size()*(i2)];
2127 }
2128 }
2129 }
2130 }
2131 }
2132 if (x1 == x2) {
2133 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x4);
2134 for (int i4 = 0; i4 != x4.size(); ++i4) {
2135 for (int i3 = 0; i3 != x3.size(); ++i3) {
2136 for (int i0 = 0; i0 != x0.size(); ++i0) {
2137 for (int i5 = 0; i5 != x5.size(); ++i5) {
2138 for (int i2 = 0; i2 != x2.size(); ++i2) {
2139 odata[i5+x5.size()*(i0+x0.size()*(i2+x1.size()*(i4)))]
2140 += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i4)))] * fdata[i3+x3.size()*(i2)];
2141 }
2142 }
2143 }
2144 }
2145 }
2146 }
2147 if (x3 == x4) {
2148 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x1, x2);
2149 for (int i2 = 0; i2 != x2.size(); ++i2) {
2150 for (int i1 = 0; i1 != x1.size(); ++i1) {
2151 for (int i0 = 0; i0 != x0.size(); ++i0) {
2152 for (int i5 = 0; i5 != x5.size(); ++i5) {
2153 for (int i4 = 0; i4 != x4.size(); ++i4) {
2154 odata[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i4)))]
2155 += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i2)))] * fdata[i4+x3.size()*(i2)];
2156 }
2157 }
2158 }
2159 }
2160 }
2161 }
2162 {
2163 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x0, x1, x4, x3, x2);
2164 for (int i2 = 0; i2 != x2.size(); ++i2) {
2165 for (int i3 = 0; i3 != x3.size(); ++i3) {
2166 for (int i4 = 0; i4 != x4.size(); ++i4) {
2167 for (int i1 = 0; i1 != x1.size(); ++i1) {
2168 for (int i0 = 0; i0 != x0.size(); ++i0) {
2169 for (int i5 = 0; i5 != x5.size(); ++i5) {
2170 odata[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i4)))]
2171 += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))] * fdata[i3+x3.size()*(i2)];
2172 }
2173 }
2174 }
2175 }
2176 }
2177 }
2178 }
2179 out()->add_block(odata, x5, x0, x1, x4);
2180 }
2181
compute()2182 void Task16::Task_local::compute() {
2183 const Index x3 = b(0);
2184 const Index x0 = b(1);
2185 const Index x1 = b(2);
2186 const Index x2 = b(3);
2187 // tensor label: Gamma32
2188 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x0, x1, x2)]);
2189 std::fill_n(odata.get(), out()->get_size(x3, x0, x1, x2), 0.0);
2190 {
2191 if (x1 == x2) {
2192 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
2193 for (int i2 = 0; i2 != x2.size(); ++i2) {
2194 for (int i0 = 0; i0 != x0.size(); ++i0) {
2195 for (int i3 = 0; i3 != x3.size(); ++i3) {
2196 odata[i3+x3.size()*(i0+x0.size()*(i2+x1.size()*(i2)))]
2197 += (2.0) * i0data[i3+x3.size()*(i0)];
2198 }
2199 }
2200 }
2201 }
2202 }
2203 {
2204 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x0, x1, x2);
2205 sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x3.size(), x0.size(), x1.size(), x2.size());
2206 }
2207 out()->add_block(odata, x3, x0, x1, x2);
2208 }
2209
compute()2210 void Task17::Task_local::compute() {
2211 const Index x3 = b(0);
2212 const Index x2 = b(1);
2213 const Index x1 = b(2);
2214 const Index x0 = b(3);
2215 // tensor label: Gamma35
2216 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x2, x1, x0)]);
2217 std::fill_n(odata.get(), out()->get_size(x3, x2, x1, x0), 0.0);
2218 {
2219 if (x1 == x2) {
2220 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0);
2221 for (int i0 = 0; i0 != x0.size(); ++i0) {
2222 for (int i2 = 0; i2 != x2.size(); ++i2) {
2223 for (int i3 = 0; i3 != x3.size(); ++i3) {
2224 odata[i3+x3.size()*(i2+x2.size()*(i2+x1.size()*(i0)))]
2225 += (1.0) * i0data[i3+x3.size()*(i0)];
2226 }
2227 }
2228 }
2229 }
2230 }
2231 {
2232 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2, x1, x0);
2233 sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x3.size(), x2.size(), x1.size(), x0.size());
2234 }
2235 out()->add_block(odata, x3, x2, x1, x0);
2236 }
2237
compute()2238 void Task18::Task_local::compute() {
2239 const Index x5 = b(0);
2240 const Index x4 = b(1);
2241 const Index x1 = b(2);
2242 const Index x0 = b(3);
2243 const Index x3 = b(4);
2244 const Index x2 = b(5);
2245 // tensor label: Gamma34
2246 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x1, x0)]);
2247 std::fill_n(odata.get(), out()->get_size(x5, x4, x1, x0), 0.0);
2248 // associated with merged
2249 std::unique_ptr<double[]> fdata = in(3)->get_block(x3, x2);
2250 if (x1 == x4) {
2251 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x2);
2252 for (int i2 = 0; i2 != x2.size(); ++i2) {
2253 for (int i3 = 0; i3 != x3.size(); ++i3) {
2254 for (int i0 = 0; i0 != x0.size(); ++i0) {
2255 for (int i5 = 0; i5 != x5.size(); ++i5) {
2256 for (int i4 = 0; i4 != x4.size(); ++i4) {
2257 odata[i5+x5.size()*(i4+x4.size()*(i4+x1.size()*(i0)))]
2258 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2)))] * fdata[i3+x3.size()*(i2)];
2259 }
2260 }
2261 }
2262 }
2263 }
2264 }
2265 if (x3 == x4 && x1 == x2) {
2266 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
2267 for (int i0 = 0; i0 != x0.size(); ++i0) {
2268 for (int i5 = 0; i5 != x5.size(); ++i5) {
2269 for (int i4 = 0; i4 != x4.size(); ++i4) {
2270 for (int i2 = 0; i2 != x2.size(); ++i2) {
2271 odata[i5+x5.size()*(i4+x4.size()*(i2+x1.size()*(i0)))]
2272 += (1.0) * i0data[i5+x5.size()*(i0)] * fdata[i4+x3.size()*(i2)];
2273 }
2274 }
2275 }
2276 }
2277 }
2278 if (x1 == x2) {
2279 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x0);
2280 for (int i0 = 0; i0 != x0.size(); ++i0) {
2281 for (int i3 = 0; i3 != x3.size(); ++i3) {
2282 for (int i4 = 0; i4 != x4.size(); ++i4) {
2283 for (int i5 = 0; i5 != x5.size(); ++i5) {
2284 for (int i2 = 0; i2 != x2.size(); ++i2) {
2285 odata[i5+x5.size()*(i4+x4.size()*(i2+x1.size()*(i0)))]
2286 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0)))] * fdata[i3+x3.size()*(i2)];
2287 }
2288 }
2289 }
2290 }
2291 }
2292 }
2293 if (x3 == x4) {
2294 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2, x1, x0);
2295 for (int i0 = 0; i0 != x0.size(); ++i0) {
2296 for (int i1 = 0; i1 != x1.size(); ++i1) {
2297 for (int i2 = 0; i2 != x2.size(); ++i2) {
2298 for (int i5 = 0; i5 != x5.size(); ++i5) {
2299 for (int i4 = 0; i4 != x4.size(); ++i4) {
2300 odata[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))]
2301 += (1.0) * i0data[i5+x5.size()*(i2+x2.size()*(i1+x1.size()*(i0)))] * fdata[i4+x3.size()*(i2)];
2302 }
2303 }
2304 }
2305 }
2306 }
2307 }
2308 {
2309 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x3, x2, x1, x0);
2310 for (int i0 = 0; i0 != x0.size(); ++i0) {
2311 for (int i1 = 0; i1 != x1.size(); ++i1) {
2312 for (int i2 = 0; i2 != x2.size(); ++i2) {
2313 for (int i3 = 0; i3 != x3.size(); ++i3) {
2314 for (int i4 = 0; i4 != x4.size(); ++i4) {
2315 for (int i5 = 0; i5 != x5.size(); ++i5) {
2316 odata[i5+x5.size()*(i4+x4.size()*(i1+x1.size()*(i0)))]
2317 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1+x1.size()*(i0)))))] * fdata[i3+x3.size()*(i2)];
2318 }
2319 }
2320 }
2321 }
2322 }
2323 }
2324 }
2325 out()->add_block(odata, x5, x4, x1, x0);
2326 }
2327
compute()2328 void Task19::Task_local::compute() {
2329 const Index x5 = b(0);
2330 const Index x0 = b(1);
2331 const Index x4 = b(2);
2332 const Index x3 = b(3);
2333 const Index x1 = b(4);
2334 const Index x2 = b(5);
2335 // tensor label: Gamma37
2336 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x3, x1, x2)]);
2337 std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x3, x1, x2), 0.0);
2338 {
2339 if (x1 == x2) {
2340 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x3);
2341 for (int i2 = 0; i2 != x2.size(); ++i2) {
2342 for (int i3 = 0; i3 != x3.size(); ++i3) {
2343 for (int i4 = 0; i4 != x4.size(); ++i4) {
2344 for (int i0 = 0; i0 != x0.size(); ++i0) {
2345 for (int i5 = 0; i5 != x5.size(); ++i5) {
2346 odata[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2+x1.size()*(i2)))))]
2347 += (2.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3)))];
2348 }
2349 }
2350 }
2351 }
2352 }
2353 }
2354 }
2355 {
2356 if (x1 == x3) {
2357 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x2);
2358 for (int i2 = 0; i2 != x2.size(); ++i2) {
2359 for (int i3 = 0; i3 != x3.size(); ++i3) {
2360 for (int i4 = 0; i4 != x4.size(); ++i4) {
2361 for (int i0 = 0; i0 != x0.size(); ++i0) {
2362 for (int i5 = 0; i5 != x5.size(); ++i5) {
2363 odata[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i2)))))]
2364 += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i2)))];
2365 }
2366 }
2367 }
2368 }
2369 }
2370 }
2371 }
2372 {
2373 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x4, x3, x1, x2);
2374 sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x5.size(), x0.size(), x4.size(), x3.size(), x1.size(), x2.size());
2375 }
2376 out()->add_block(odata, x5, x0, x4, x3, x1, x2);
2377 }
2378
compute()2379 void Task20::Task_local::compute() {
2380 const Index x1 = b(0);
2381 const Index x0 = b(1);
2382 // tensor label: Gamma38
2383 std::unique_ptr<double[]> odata(new double[out()->get_size(x1, x0)]);
2384 std::fill_n(odata.get(), out()->get_size(x1, x0), 0.0);
2385 {
2386 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
2387 sort_indices<0,1,1,1,1,1>(i0data, odata, x1.size(), x0.size());
2388 }
2389 out()->add_block(odata, x1, x0);
2390 }
2391
compute()2392 void Task21::Task_local::compute() {
2393 const Index x5 = b(0);
2394 const Index x2 = b(1);
2395 const Index x4 = b(2);
2396 const Index x3 = b(3);
2397 const Index x1 = b(4);
2398 const Index x0 = b(5);
2399 // tensor label: Gamma51
2400 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x2, x4, x3, x1, x0)]);
2401 std::fill_n(odata.get(), out()->get_size(x5, x2, x4, x3, x1, x0), 0.0);
2402 {
2403 if (x1 == x2) {
2404 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x3);
2405 for (int i0 = 0; i0 != x0.size(); ++i0) {
2406 for (int i3 = 0; i3 != x3.size(); ++i3) {
2407 for (int i4 = 0; i4 != x4.size(); ++i4) {
2408 for (int i2 = 0; i2 != x2.size(); ++i2) {
2409 for (int i5 = 0; i5 != x5.size(); ++i5) {
2410 odata[i5+x5.size()*(i2+x2.size()*(i4+x4.size()*(i3+x3.size()*(i2+x1.size()*(i0)))))]
2411 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3)))];
2412 }
2413 }
2414 }
2415 }
2416 }
2417 }
2418 }
2419 {
2420 if (x1 == x3) {
2421 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x2, x4, x0);
2422 for (int i0 = 0; i0 != x0.size(); ++i0) {
2423 for (int i3 = 0; i3 != x3.size(); ++i3) {
2424 for (int i4 = 0; i4 != x4.size(); ++i4) {
2425 for (int i2 = 0; i2 != x2.size(); ++i2) {
2426 for (int i5 = 0; i5 != x5.size(); ++i5) {
2427 odata[i5+x5.size()*(i2+x2.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
2428 += (1.0) * i0data[i5+x5.size()*(i2+x2.size()*(i4+x4.size()*(i0)))];
2429 }
2430 }
2431 }
2432 }
2433 }
2434 }
2435 }
2436 {
2437 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2, x4, x3, x1, x0);
2438 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x2.size(), x4.size(), x3.size(), x1.size(), x0.size());
2439 }
2440 out()->add_block(odata, x5, x2, x4, x3, x1, x0);
2441 }
2442
compute()2443 void Task22::Task_local::compute() {
2444 const Index x5 = b(0);
2445 const Index x0 = b(1);
2446 const Index x3 = b(2);
2447 const Index x4 = b(3);
2448 const Index x2 = b(4);
2449 const Index x1 = b(5);
2450 // tensor label: Gamma56
2451 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x3, x4, x2, x1)]);
2452 std::fill_n(odata.get(), out()->get_size(x5, x0, x3, x4, x2, x1), 0.0);
2453 {
2454 if (x2 == x4) {
2455 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x3, x1);
2456 for (int i1 = 0; i1 != x1.size(); ++i1) {
2457 for (int i4 = 0; i4 != x4.size(); ++i4) {
2458 for (int i3 = 0; i3 != x3.size(); ++i3) {
2459 for (int i0 = 0; i0 != x0.size(); ++i0) {
2460 for (int i5 = 0; i5 != x5.size(); ++i5) {
2461 odata[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i4+x4.size()*(i4+x2.size()*(i1)))))]
2462 += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i1)))];
2463 }
2464 }
2465 }
2466 }
2467 }
2468 }
2469 }
2470 {
2471 if (x3 == x4) {
2472 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x2, x1);
2473 for (int i1 = 0; i1 != x1.size(); ++i1) {
2474 for (int i2 = 0; i2 != x2.size(); ++i2) {
2475 for (int i4 = 0; i4 != x4.size(); ++i4) {
2476 for (int i0 = 0; i0 != x0.size(); ++i0) {
2477 for (int i5 = 0; i5 != x5.size(); ++i5) {
2478 odata[i5+x5.size()*(i0+x0.size()*(i4+x3.size()*(i4+x4.size()*(i2+x2.size()*(i1)))))]
2479 += (2.0) * i0data[i5+x5.size()*(i0+x0.size()*(i2+x2.size()*(i1)))];
2480 }
2481 }
2482 }
2483 }
2484 }
2485 }
2486 }
2487 {
2488 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x4, x2, x1);
2489 sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x5.size(), x0.size(), x3.size(), x4.size(), x2.size(), x1.size());
2490 }
2491 out()->add_block(odata, x5, x0, x3, x4, x2, x1);
2492 }
2493
compute()2494 void Task23::Task_local::compute() {
2495 const Index x5 = b(0);
2496 const Index x4 = b(1);
2497 const Index x3 = b(2);
2498 const Index x0 = b(3);
2499 const Index x2 = b(4);
2500 const Index x1 = b(5);
2501 // tensor label: Gamma57
2502 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x3, x0, x2, x1)]);
2503 std::fill_n(odata.get(), out()->get_size(x5, x4, x3, x0, x2, x1), 0.0);
2504 {
2505 if (x2 == x4) {
2506 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x1, x3, x0);
2507 for (int i1 = 0; i1 != x1.size(); ++i1) {
2508 for (int i0 = 0; i0 != x0.size(); ++i0) {
2509 for (int i3 = 0; i3 != x3.size(); ++i3) {
2510 for (int i4 = 0; i4 != x4.size(); ++i4) {
2511 for (int i5 = 0; i5 != x5.size(); ++i5) {
2512 odata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0+x0.size()*(i4+x2.size()*(i1)))))]
2513 += (1.0) * i0data[i5+x5.size()*(i1+x1.size()*(i3+x3.size()*(i0)))];
2514 }
2515 }
2516 }
2517 }
2518 }
2519 }
2520 }
2521 {
2522 if (x3 == x4) {
2523 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x2, x1);
2524 for (int i1 = 0; i1 != x1.size(); ++i1) {
2525 for (int i2 = 0; i2 != x2.size(); ++i2) {
2526 for (int i0 = 0; i0 != x0.size(); ++i0) {
2527 for (int i4 = 0; i4 != x4.size(); ++i4) {
2528 for (int i5 = 0; i5 != x5.size(); ++i5) {
2529 odata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i0+x0.size()*(i2+x2.size()*(i1)))))]
2530 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i2+x2.size()*(i1)))];
2531 }
2532 }
2533 }
2534 }
2535 }
2536 }
2537 }
2538 {
2539 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x0, x2, x1);
2540 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x4.size(), x3.size(), x0.size(), x2.size(), x1.size());
2541 }
2542 out()->add_block(odata, x5, x4, x3, x0, x2, x1);
2543 }
2544
compute()2545 void Task24::Task_local::compute() {
2546 const Index x7 = b(0);
2547 const Index x0 = b(1);
2548 const Index x6 = b(2);
2549 const Index x5 = b(3);
2550 const Index x2 = b(4);
2551 const Index x1 = b(5);
2552 const Index x4 = b(6);
2553 const Index x3 = b(7);
2554 // tensor label: Gamma58
2555 std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x0, x6, x5, x2, x1)]);
2556 std::fill_n(odata.get(), out()->get_size(x7, x0, x6, x5, x2, x1), 0.0);
2557 // associated with merged
2558 std::unique_ptr<double[]> fdata = in(3)->get_block(x4, x3);
2559 if (x2 == x5) {
2560 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x6, x1, x4, x3);
2561 for (int i3 = 0; i3 != x3.size(); ++i3) {
2562 for (int i4 = 0; i4 != x4.size(); ++i4) {
2563 for (int i1 = 0; i1 != x1.size(); ++i1) {
2564 for (int i6 = 0; i6 != x6.size(); ++i6) {
2565 for (int i0 = 0; i0 != x0.size(); ++i0) {
2566 for (int i7 = 0; i7 != x7.size(); ++i7) {
2567 for (int i5 = 0; i5 != x5.size(); ++i5) {
2568 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i5+x2.size()*(i1)))))]
2569 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1+x1.size()*(i4+x4.size()*(i3)))))] * fdata[i4+x4.size()*(i3)];
2570 }
2571 }
2572 }
2573 }
2574 }
2575 }
2576 }
2577 }
2578 if (x4 == x5 && x2 == x3) {
2579 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0, x6, x1);
2580 for (int i1 = 0; i1 != x1.size(); ++i1) {
2581 for (int i6 = 0; i6 != x6.size(); ++i6) {
2582 for (int i0 = 0; i0 != x0.size(); ++i0) {
2583 for (int i7 = 0; i7 != x7.size(); ++i7) {
2584 for (int i5 = 0; i5 != x5.size(); ++i5) {
2585 for (int i3 = 0; i3 != x3.size(); ++i3) {
2586 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i3+x2.size()*(i1)))))]
2587 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))] * fdata[i5+x4.size()*(i3)];
2588 }
2589 }
2590 }
2591 }
2592 }
2593 }
2594 }
2595 if (x2 == x3) {
2596 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x6, x5, x4, x1);
2597 for (int i1 = 0; i1 != x1.size(); ++i1) {
2598 for (int i4 = 0; i4 != x4.size(); ++i4) {
2599 for (int i5 = 0; i5 != x5.size(); ++i5) {
2600 for (int i6 = 0; i6 != x6.size(); ++i6) {
2601 for (int i0 = 0; i0 != x0.size(); ++i0) {
2602 for (int i7 = 0; i7 != x7.size(); ++i7) {
2603 for (int i3 = 0; i3 != x3.size(); ++i3) {
2604 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i3+x2.size()*(i1)))))]
2605 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i1)))))] * fdata[i4+x4.size()*(i3)];
2606 }
2607 }
2608 }
2609 }
2610 }
2611 }
2612 }
2613 }
2614 if (x4 == x5) {
2615 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x6, x3, x2, x1);
2616 for (int i1 = 0; i1 != x1.size(); ++i1) {
2617 for (int i2 = 0; i2 != x2.size(); ++i2) {
2618 for (int i3 = 0; i3 != x3.size(); ++i3) {
2619 for (int i6 = 0; i6 != x6.size(); ++i6) {
2620 for (int i0 = 0; i0 != x0.size(); ++i0) {
2621 for (int i7 = 0; i7 != x7.size(); ++i7) {
2622 for (int i5 = 0; i5 != x5.size(); ++i5) {
2623 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i1)))))]
2624 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i3+x3.size()*(i2+x2.size()*(i1)))))] * fdata[i5+x4.size()*(i3)];
2625 }
2626 }
2627 }
2628 }
2629 }
2630 }
2631 }
2632 }
2633 {
2634 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x0, x6, x5, x2, x1);
2635 for (int i1 = 0; i1 != x1.size(); ++i1) {
2636 for (int i2 = 0; i2 != x2.size(); ++i2) {
2637 for (int i5 = 0; i5 != x5.size(); ++i5) {
2638 for (int i6 = 0; i6 != x6.size(); ++i6) {
2639 for (int i0 = 0; i0 != x0.size(); ++i0) {
2640 for (int i7 = 0; i7 != x7.size(); ++i7) {
2641 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i1)))))]
2642 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i2+x2.size()*(i1)))))];
2643 }
2644 }
2645 }
2646 }
2647 }
2648 }
2649 }
2650 out()->add_block(odata, x7, x0, x6, x5, x2, x1);
2651 }
2652
compute()2653 void Task25::Task_local::compute() {
2654 const Index x5 = b(0);
2655 const Index x0 = b(1);
2656 const Index x4 = b(2);
2657 const Index x3 = b(3);
2658 const Index x2 = b(4);
2659 const Index x1 = b(5);
2660 // tensor label: Gamma59
2661 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x3, x2, x1)]);
2662 std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x3, x2, x1), 0.0);
2663 {
2664 if (x2 == x3) {
2665 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x1);
2666 for (int i1 = 0; i1 != x1.size(); ++i1) {
2667 for (int i3 = 0; i3 != x3.size(); ++i3) {
2668 for (int i4 = 0; i4 != x4.size(); ++i4) {
2669 for (int i0 = 0; i0 != x0.size(); ++i0) {
2670 for (int i5 = 0; i5 != x5.size(); ++i5) {
2671 odata[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i3+x2.size()*(i1)))))]
2672 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i1)))];
2673 }
2674 }
2675 }
2676 }
2677 }
2678 }
2679 }
2680 {
2681 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x4, x3, x2, x1);
2682 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x0.size(), x4.size(), x3.size(), x2.size(), x1.size());
2683 }
2684 out()->add_block(odata, x5, x0, x4, x3, x2, x1);
2685 }
2686
compute()2687 void Task26::Task_local::compute() {
2688 const Index x3 = b(0);
2689 const Index x0 = b(1);
2690 const Index x2 = b(2);
2691 const Index x1 = b(3);
2692 // tensor label: Gamma60
2693 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x0, x2, x1)]);
2694 std::fill_n(odata.get(), out()->get_size(x3, x0, x2, x1), 0.0);
2695 {
2696 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0, x2, x1);
2697 sort_indices<0,1,2,3,1,1,1,1>(i0data, odata, x3.size(), x0.size(), x2.size(), x1.size());
2698 }
2699 out()->add_block(odata, x3, x0, x2, x1);
2700 }
2701
compute()2702 void Task27::Task_local::compute() {
2703 const Index x3 = b(0);
2704 const Index x0 = b(1);
2705 const Index x2 = b(2);
2706 const Index x1 = b(3);
2707 // tensor label: Gamma79
2708 std::unique_ptr<double[]> odata(new double[out()->get_size(x3, x0)]);
2709 std::fill_n(odata.get(), out()->get_size(x3, x0), 0.0);
2710 // associated with merged
2711 std::unique_ptr<double[]> fdata = in(1)->get_block(x2, x1);
2712 {
2713 std::unique_ptr<double[]> i0data = in(0)->get_block(x3, x0, x2, x1);
2714 for (int i1 = 0; i1 != x1.size(); ++i1) {
2715 for (int i2 = 0; i2 != x2.size(); ++i2) {
2716 for (int i0 = 0; i0 != x0.size(); ++i0) {
2717 for (int i3 = 0; i3 != x3.size(); ++i3) {
2718 odata[i3+x3.size()*(i0)]
2719 += (1.0) * i0data[i3+x3.size()*(i0+x0.size()*(i2+x2.size()*(i1)))] * fdata[i2+x2.size()*(i1)];
2720 }
2721 }
2722 }
2723 }
2724 }
2725 out()->add_block(odata, x3, x0);
2726 }
2727
compute()2728 void Task28::Task_local::compute() {
2729 const Index x5 = b(0);
2730 const Index x0 = b(1);
2731 const Index x4 = b(2);
2732 const Index x1 = b(3);
2733 const Index x3 = b(4);
2734 const Index x2 = b(5);
2735 // tensor label: Gamma90
2736 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x1)]);
2737 std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x1), 0.0);
2738 // associated with merged
2739 std::unique_ptr<double[]> fdata = in(1)->get_block(x3, x2);
2740 {
2741 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x1, x3, x2);
2742 for (int i2 = 0; i2 != x2.size(); ++i2) {
2743 for (int i3 = 0; i3 != x3.size(); ++i3) {
2744 for (int i1 = 0; i1 != x1.size(); ++i1) {
2745 for (int i4 = 0; i4 != x4.size(); ++i4) {
2746 for (int i0 = 0; i0 != x0.size(); ++i0) {
2747 for (int i5 = 0; i5 != x5.size(); ++i5) {
2748 odata[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i1)))]
2749 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i4+x4.size()*(i1+x1.size()*(i3+x3.size()*(i2)))))] * fdata[i3+x3.size()*(i2)];
2750 }
2751 }
2752 }
2753 }
2754 }
2755 }
2756 }
2757 out()->add_block(odata, x5, x0, x4, x1);
2758 }
2759
compute()2760 void Task29::Task_local::compute() {
2761 const Index x2 = b(0);
2762 const Index x5 = b(1);
2763 const Index x4 = b(2);
2764 const Index x3 = b(3);
2765 const Index x1 = b(4);
2766 const Index x0 = b(5);
2767 // tensor label: Gamma105
2768 std::unique_ptr<double[]> odata(new double[out()->get_size(x2, x5, x4, x3, x1, x0)]);
2769 std::fill_n(odata.get(), out()->get_size(x2, x5, x4, x3, x1, x0), 0.0);
2770 {
2771 if (x2 == x5 && x1 == x3) {
2772 std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x0);
2773 for (int i0 = 0; i0 != x0.size(); ++i0) {
2774 for (int i3 = 0; i3 != x3.size(); ++i3) {
2775 for (int i4 = 0; i4 != x4.size(); ++i4) {
2776 for (int i5 = 0; i5 != x5.size(); ++i5) {
2777 odata[i5+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
2778 += (2.0) * i0data[i4+x4.size()*(i0)];
2779 }
2780 }
2781 }
2782 }
2783 }
2784 }
2785 {
2786 if (x2 == x3 && x1 == x5) {
2787 std::unique_ptr<double[]> i0data = in(0)->get_block(x4, x0);
2788 for (int i0 = 0; i0 != x0.size(); ++i0) {
2789 for (int i3 = 0; i3 != x3.size(); ++i3) {
2790 for (int i4 = 0; i4 != x4.size(); ++i4) {
2791 for (int i5 = 0; i5 != x5.size(); ++i5) {
2792 odata[i3+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))]
2793 += (-1.0) * i0data[i4+x4.size()*(i0)];
2794 }
2795 }
2796 }
2797 }
2798 }
2799 }
2800 {
2801 if (x1 == x5) {
2802 std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x3, x2, x0);
2803 for (int i0 = 0; i0 != x0.size(); ++i0) {
2804 for (int i3 = 0; i3 != x3.size(); ++i3) {
2805 for (int i4 = 0; i4 != x4.size(); ++i4) {
2806 for (int i5 = 0; i5 != x5.size(); ++i5) {
2807 for (int i2 = 0; i2 != x2.size(); ++i2) {
2808 odata[i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))]
2809 += (-1.0) * i0data[i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i0)))];
2810 }
2811 }
2812 }
2813 }
2814 }
2815 }
2816 }
2817 {
2818 if (x2 == x5) {
2819 std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x3, x1, x0);
2820 for (int i0 = 0; i0 != x0.size(); ++i0) {
2821 for (int i1 = 0; i1 != x1.size(); ++i1) {
2822 for (int i3 = 0; i3 != x3.size(); ++i3) {
2823 for (int i4 = 0; i4 != x4.size(); ++i4) {
2824 for (int i5 = 0; i5 != x5.size(); ++i5) {
2825 odata[i5+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
2826 += (2.0) * i0data[i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
2827 }
2828 }
2829 }
2830 }
2831 }
2832 }
2833 }
2834 {
2835 if (x4 == x5 && x1 == x3) {
2836 std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x0);
2837 for (int i0 = 0; i0 != x0.size(); ++i0) {
2838 for (int i3 = 0; i3 != x3.size(); ++i3) {
2839 for (int i5 = 0; i5 != x5.size(); ++i5) {
2840 for (int i2 = 0; i2 != x2.size(); ++i2) {
2841 odata[i2+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
2842 += (-1.0) * i0data[i2+x2.size()*(i0)];
2843 }
2844 }
2845 }
2846 }
2847 }
2848 }
2849 {
2850 if (x1 == x3) {
2851 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x5, x4, x0);
2852 for (int i0 = 0; i0 != x0.size(); ++i0) {
2853 for (int i3 = 0; i3 != x3.size(); ++i3) {
2854 for (int i4 = 0; i4 != x4.size(); ++i4) {
2855 for (int i5 = 0; i5 != x5.size(); ++i5) {
2856 for (int i2 = 0; i2 != x2.size(); ++i2) {
2857 odata[i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))]
2858 += (-1.0) * i0data[i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i0)))];
2859 }
2860 }
2861 }
2862 }
2863 }
2864 }
2865 }
2866 {
2867 if (x2 == x3 && x4 == x5) {
2868 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x0);
2869 for (int i0 = 0; i0 != x0.size(); ++i0) {
2870 for (int i1 = 0; i1 != x1.size(); ++i1) {
2871 for (int i3 = 0; i3 != x3.size(); ++i3) {
2872 for (int i5 = 0; i5 != x5.size(); ++i5) {
2873 odata[i3+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
2874 += (2.0) * i0data[i1+x1.size()*(i0)];
2875 }
2876 }
2877 }
2878 }
2879 }
2880 }
2881 {
2882 if (x2 == x3) {
2883 std::unique_ptr<double[]> i0data = in(1)->get_block(x4, x5, x1, x0);
2884 for (int i0 = 0; i0 != x0.size(); ++i0) {
2885 for (int i1 = 0; i1 != x1.size(); ++i1) {
2886 for (int i3 = 0; i3 != x3.size(); ++i3) {
2887 for (int i4 = 0; i4 != x4.size(); ++i4) {
2888 for (int i5 = 0; i5 != x5.size(); ++i5) {
2889 odata[i3+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
2890 += (-1.0) * i0data[i4+x4.size()*(i5+x5.size()*(i1+x1.size()*(i0)))];
2891 }
2892 }
2893 }
2894 }
2895 }
2896 }
2897 }
2898 {
2899 if (x4 == x5) {
2900 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x3, x1, x0);
2901 for (int i0 = 0; i0 != x0.size(); ++i0) {
2902 for (int i1 = 0; i1 != x1.size(); ++i1) {
2903 for (int i3 = 0; i3 != x3.size(); ++i3) {
2904 for (int i5 = 0; i5 != x5.size(); ++i5) {
2905 for (int i2 = 0; i2 != x2.size(); ++i2) {
2906 odata[i2+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))]
2907 += (-1.0) * i0data[i2+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
2908 }
2909 }
2910 }
2911 }
2912 }
2913 }
2914 }
2915 {
2916 std::unique_ptr<double[]> i0data = in(2)->get_block(x2, x5, x4, x3, x1, x0);
2917 sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x2.size(), x5.size(), x4.size(), x3.size(), x1.size(), x0.size());
2918 }
2919 out()->add_block(odata, x2, x5, x4, x3, x1, x0);
2920 }
2921
compute()2922 void Task30::Task_local::compute() {
2923 const Index x0 = b(0);
2924 const Index x5 = b(1);
2925 const Index x1 = b(2);
2926 const Index x4 = b(3);
2927 const Index x3 = b(4);
2928 const Index x2 = b(5);
2929 // tensor label: Gamma138
2930 std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x5, x1, x4, x3, x2)]);
2931 std::fill_n(odata.get(), out()->get_size(x0, x5, x1, x4, x3, x2), 0.0);
2932 {
2933 if (x1 == x5 && x0 == x4) {
2934 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
2935 for (int i2 = 0; i2 != x2.size(); ++i2) {
2936 for (int i3 = 0; i3 != x3.size(); ++i3) {
2937 for (int i4 = 0; i4 != x4.size(); ++i4) {
2938 for (int i5 = 0; i5 != x5.size(); ++i5) {
2939 odata[i4+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
2940 += (-2.0) * i0data[i3+x3.size()*(i2)];
2941 }
2942 }
2943 }
2944 }
2945 }
2946 }
2947 {
2948 if (x1 == x4 && x0 == x5) {
2949 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x2);
2950 for (int i2 = 0; i2 != x2.size(); ++i2) {
2951 for (int i3 = 0; i3 != x3.size(); ++i3) {
2952 for (int i4 = 0; i4 != x4.size(); ++i4) {
2953 for (int i5 = 0; i5 != x5.size(); ++i5) {
2954 odata[i5+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
2955 += (4.0) * i0data[i3+x3.size()*(i2)];
2956 }
2957 }
2958 }
2959 }
2960 }
2961 }
2962 {
2963 // rdm0 non-merged case
2964 if (x0 == x2 && x1 == x4 && x3 == x5) {
2965 std::unique_ptr<double[]> i0data = in(0)->get_block();
2966 for (int i2 = 0; i2 != x2.size(); ++i2) {
2967 for (int i4 = 0; i4 != x4.size(); ++i4) {
2968 for (int i5 = 0; i5 != x5.size(); ++i5) {
2969 odata[i2+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4+x4.size()*(i5+x3.size()*(i2)))))] += 4.0 * i0data[0];
2970 }
2971 }
2972 }
2973 }
2974 }
2975 {
2976 if (x1 == x4 && x0 == x2) {
2977 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x5);
2978 for (int i2 = 0; i2 != x2.size(); ++i2) {
2979 for (int i3 = 0; i3 != x3.size(); ++i3) {
2980 for (int i4 = 0; i4 != x4.size(); ++i4) {
2981 for (int i5 = 0; i5 != x5.size(); ++i5) {
2982 odata[i2+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
2983 += (-2.0) * i0data[i3+x3.size()*(i5)];
2984 }
2985 }
2986 }
2987 }
2988 }
2989 }
2990 {
2991 // rdm0 non-merged case
2992 if (x0 == x2 && x1 == x5 && x3 == x4) {
2993 std::unique_ptr<double[]> i0data = in(0)->get_block();
2994 for (int i2 = 0; i2 != x2.size(); ++i2) {
2995 for (int i4 = 0; i4 != x4.size(); ++i4) {
2996 for (int i5 = 0; i5 != x5.size(); ++i5) {
2997 odata[i2+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))] += -2.0 * i0data[0];
2998 }
2999 }
3000 }
3001 }
3002 }
3003 {
3004 if (x1 == x5 && x0 == x2) {
3005 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
3006 for (int i2 = 0; i2 != x2.size(); ++i2) {
3007 for (int i3 = 0; i3 != x3.size(); ++i3) {
3008 for (int i4 = 0; i4 != x4.size(); ++i4) {
3009 for (int i5 = 0; i5 != x5.size(); ++i5) {
3010 odata[i2+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3011 += (1.0) * i0data[i3+x3.size()*(i4)];
3012 }
3013 }
3014 }
3015 }
3016 }
3017 }
3018 {
3019 if (x3 == x4 && x0 == x2) {
3020 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x5);
3021 for (int i2 = 0; i2 != x2.size(); ++i2) {
3022 for (int i4 = 0; i4 != x4.size(); ++i4) {
3023 for (int i1 = 0; i1 != x1.size(); ++i1) {
3024 for (int i5 = 0; i5 != x5.size(); ++i5) {
3025 odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))]
3026 += (1.0) * i0data[i1+x1.size()*(i5)];
3027 }
3028 }
3029 }
3030 }
3031 }
3032 }
3033 {
3034 if (x3 == x5 && x0 == x2) {
3035 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x4);
3036 for (int i2 = 0; i2 != x2.size(); ++i2) {
3037 for (int i4 = 0; i4 != x4.size(); ++i4) {
3038 for (int i1 = 0; i1 != x1.size(); ++i1) {
3039 for (int i5 = 0; i5 != x5.size(); ++i5) {
3040 odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i5+x3.size()*(i2)))))]
3041 += (-2.0) * i0data[i1+x1.size()*(i4)];
3042 }
3043 }
3044 }
3045 }
3046 }
3047 }
3048 {
3049 if (x0 == x2) {
3050 std::unique_ptr<double[]> i0data = in(2)->get_block(x3, x5, x1, x4);
3051 for (int i2 = 0; i2 != x2.size(); ++i2) {
3052 for (int i3 = 0; i3 != x3.size(); ++i3) {
3053 for (int i4 = 0; i4 != x4.size(); ++i4) {
3054 for (int i1 = 0; i1 != x1.size(); ++i1) {
3055 for (int i5 = 0; i5 != x5.size(); ++i5) {
3056 odata[i2+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3057 += (1.0) * i0data[i3+x3.size()*(i5+x5.size()*(i1+x1.size()*(i4)))];
3058 }
3059 }
3060 }
3061 }
3062 }
3063 }
3064 }
3065 {
3066 // rdm0 non-merged case
3067 if (x3 == x5 && x1 == x2 && x0 == x4) {
3068 std::unique_ptr<double[]> i0data = in(0)->get_block();
3069 for (int i2 = 0; i2 != x2.size(); ++i2) {
3070 for (int i4 = 0; i4 != x4.size(); ++i4) {
3071 for (int i5 = 0; i5 != x5.size(); ++i5) {
3072 odata[i4+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4+x4.size()*(i5+x3.size()*(i2)))))] += -2.0 * i0data[0];
3073 }
3074 }
3075 }
3076 }
3077 }
3078 {
3079 if (x1 == x2 && x0 == x4) {
3080 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x5);
3081 for (int i2 = 0; i2 != x2.size(); ++i2) {
3082 for (int i3 = 0; i3 != x3.size(); ++i3) {
3083 for (int i4 = 0; i4 != x4.size(); ++i4) {
3084 for (int i5 = 0; i5 != x5.size(); ++i5) {
3085 odata[i4+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3086 += (1.0) * i0data[i3+x3.size()*(i5)];
3087 }
3088 }
3089 }
3090 }
3091 }
3092 }
3093 {
3094 if (x3 == x5 && x0 == x4) {
3095 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
3096 for (int i2 = 0; i2 != x2.size(); ++i2) {
3097 for (int i4 = 0; i4 != x4.size(); ++i4) {
3098 for (int i1 = 0; i1 != x1.size(); ++i1) {
3099 for (int i5 = 0; i5 != x5.size(); ++i5) {
3100 odata[i4+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i5+x3.size()*(i2)))))]
3101 += (1.0) * i0data[i1+x1.size()*(i2)];
3102 }
3103 }
3104 }
3105 }
3106 }
3107 }
3108 {
3109 if (x0 == x4) {
3110 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x5, x3, x2);
3111 for (int i2 = 0; i2 != x2.size(); ++i2) {
3112 for (int i3 = 0; i3 != x3.size(); ++i3) {
3113 for (int i4 = 0; i4 != x4.size(); ++i4) {
3114 for (int i1 = 0; i1 != x1.size(); ++i1) {
3115 for (int i5 = 0; i5 != x5.size(); ++i5) {
3116 odata[i4+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3117 += (1.0) * i0data[i1+x1.size()*(i5+x5.size()*(i3+x3.size()*(i2)))];
3118 }
3119 }
3120 }
3121 }
3122 }
3123 }
3124 }
3125 {
3126 // rdm0 non-merged case
3127 if (x3 == x4 && x0 == x5 && x1 == x2) {
3128 std::unique_ptr<double[]> i0data = in(0)->get_block();
3129 for (int i2 = 0; i2 != x2.size(); ++i2) {
3130 for (int i4 = 0; i4 != x4.size(); ++i4) {
3131 for (int i5 = 0; i5 != x5.size(); ++i5) {
3132 odata[i5+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))] += 4.0 * i0data[0];
3133 }
3134 }
3135 }
3136 }
3137 }
3138 {
3139 if (x0 == x5 && x1 == x2) {
3140 std::unique_ptr<double[]> i0data = in(1)->get_block(x3, x4);
3141 for (int i2 = 0; i2 != x2.size(); ++i2) {
3142 for (int i3 = 0; i3 != x3.size(); ++i3) {
3143 for (int i4 = 0; i4 != x4.size(); ++i4) {
3144 for (int i5 = 0; i5 != x5.size(); ++i5) {
3145 odata[i5+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3146 += (-2.0) * i0data[i3+x3.size()*(i4)];
3147 }
3148 }
3149 }
3150 }
3151 }
3152 }
3153 {
3154 if (x3 == x4 && x0 == x5) {
3155 std::unique_ptr<double[]> i0data = in(1)->get_block(x1, x2);
3156 for (int i2 = 0; i2 != x2.size(); ++i2) {
3157 for (int i4 = 0; i4 != x4.size(); ++i4) {
3158 for (int i1 = 0; i1 != x1.size(); ++i1) {
3159 for (int i5 = 0; i5 != x5.size(); ++i5) {
3160 odata[i5+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))]
3161 += (-2.0) * i0data[i1+x1.size()*(i2)];
3162 }
3163 }
3164 }
3165 }
3166 }
3167 }
3168 {
3169 if (x0 == x5) {
3170 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x3, x2);
3171 for (int i2 = 0; i2 != x2.size(); ++i2) {
3172 for (int i3 = 0; i3 != x3.size(); ++i3) {
3173 for (int i4 = 0; i4 != x4.size(); ++i4) {
3174 for (int i1 = 0; i1 != x1.size(); ++i1) {
3175 for (int i5 = 0; i5 != x5.size(); ++i5) {
3176 odata[i5+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3177 += (-2.0) * i0data[i1+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
3178 }
3179 }
3180 }
3181 }
3182 }
3183 }
3184 }
3185 {
3186 if (x3 == x4 && x1 == x2) {
3187 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x5);
3188 for (int i2 = 0; i2 != x2.size(); ++i2) {
3189 for (int i4 = 0; i4 != x4.size(); ++i4) {
3190 for (int i5 = 0; i5 != x5.size(); ++i5) {
3191 for (int i0 = 0; i0 != x0.size(); ++i0) {
3192 odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))]
3193 += (-2.0) * i0data[i0+x0.size()*(i5)];
3194 }
3195 }
3196 }
3197 }
3198 }
3199 }
3200 {
3201 if (x3 == x5 && x1 == x2) {
3202 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x4);
3203 for (int i2 = 0; i2 != x2.size(); ++i2) {
3204 for (int i4 = 0; i4 != x4.size(); ++i4) {
3205 for (int i5 = 0; i5 != x5.size(); ++i5) {
3206 for (int i0 = 0; i0 != x0.size(); ++i0) {
3207 odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4+x4.size()*(i5+x3.size()*(i2)))))]
3208 += (1.0) * i0data[i0+x0.size()*(i4)];
3209 }
3210 }
3211 }
3212 }
3213 }
3214 }
3215 {
3216 if (x1 == x2) {
3217 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x5, x3, x4);
3218 for (int i2 = 0; i2 != x2.size(); ++i2) {
3219 for (int i3 = 0; i3 != x3.size(); ++i3) {
3220 for (int i4 = 0; i4 != x4.size(); ++i4) {
3221 for (int i5 = 0; i5 != x5.size(); ++i5) {
3222 for (int i0 = 0; i0 != x0.size(); ++i0) {
3223 odata[i0+x0.size()*(i5+x5.size()*(i2+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3224 += (1.0) * i0data[i0+x0.size()*(i5+x5.size()*(i3+x3.size()*(i4)))];
3225 }
3226 }
3227 }
3228 }
3229 }
3230 }
3231 }
3232 {
3233 if (x3 == x5 && x1 == x4) {
3234 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
3235 for (int i2 = 0; i2 != x2.size(); ++i2) {
3236 for (int i4 = 0; i4 != x4.size(); ++i4) {
3237 for (int i5 = 0; i5 != x5.size(); ++i5) {
3238 for (int i0 = 0; i0 != x0.size(); ++i0) {
3239 odata[i0+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4+x4.size()*(i5+x3.size()*(i2)))))]
3240 += (-2.0) * i0data[i0+x0.size()*(i2)];
3241 }
3242 }
3243 }
3244 }
3245 }
3246 }
3247 {
3248 if (x1 == x4) {
3249 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x5, x3, x2);
3250 for (int i2 = 0; i2 != x2.size(); ++i2) {
3251 for (int i3 = 0; i3 != x3.size(); ++i3) {
3252 for (int i4 = 0; i4 != x4.size(); ++i4) {
3253 for (int i5 = 0; i5 != x5.size(); ++i5) {
3254 for (int i0 = 0; i0 != x0.size(); ++i0) {
3255 odata[i0+x0.size()*(i5+x5.size()*(i4+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3256 += (-2.0) * i0data[i0+x0.size()*(i5+x5.size()*(i3+x3.size()*(i2)))];
3257 }
3258 }
3259 }
3260 }
3261 }
3262 }
3263 }
3264 {
3265 if (x3 == x4 && x1 == x5) {
3266 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x2);
3267 for (int i2 = 0; i2 != x2.size(); ++i2) {
3268 for (int i4 = 0; i4 != x4.size(); ++i4) {
3269 for (int i5 = 0; i5 != x5.size(); ++i5) {
3270 for (int i0 = 0; i0 != x0.size(); ++i0) {
3271 odata[i0+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))]
3272 += (1.0) * i0data[i0+x0.size()*(i2)];
3273 }
3274 }
3275 }
3276 }
3277 }
3278 }
3279 {
3280 if (x1 == x5) {
3281 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x4, x3, x2);
3282 for (int i2 = 0; i2 != x2.size(); ++i2) {
3283 for (int i3 = 0; i3 != x3.size(); ++i3) {
3284 for (int i4 = 0; i4 != x4.size(); ++i4) {
3285 for (int i5 = 0; i5 != x5.size(); ++i5) {
3286 for (int i0 = 0; i0 != x0.size(); ++i0) {
3287 odata[i0+x0.size()*(i5+x5.size()*(i5+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3288 += (1.0) * i0data[i0+x0.size()*(i4+x4.size()*(i3+x3.size()*(i2)))];
3289 }
3290 }
3291 }
3292 }
3293 }
3294 }
3295 }
3296 {
3297 if (x3 == x4) {
3298 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x5, x1, x2);
3299 for (int i2 = 0; i2 != x2.size(); ++i2) {
3300 for (int i4 = 0; i4 != x4.size(); ++i4) {
3301 for (int i1 = 0; i1 != x1.size(); ++i1) {
3302 for (int i5 = 0; i5 != x5.size(); ++i5) {
3303 for (int i0 = 0; i0 != x0.size(); ++i0) {
3304 odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))]
3305 += (1.0) * i0data[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i2)))];
3306 }
3307 }
3308 }
3309 }
3310 }
3311 }
3312 }
3313 {
3314 if (x3 == x5) {
3315 std::unique_ptr<double[]> i0data = in(2)->get_block(x1, x4, x0, x2);
3316 for (int i2 = 0; i2 != x2.size(); ++i2) {
3317 for (int i4 = 0; i4 != x4.size(); ++i4) {
3318 for (int i1 = 0; i1 != x1.size(); ++i1) {
3319 for (int i5 = 0; i5 != x5.size(); ++i5) {
3320 for (int i0 = 0; i0 != x0.size(); ++i0) {
3321 odata[i0+x0.size()*(i5+x5.size()*(i1+x1.size()*(i4+x4.size()*(i5+x3.size()*(i2)))))]
3322 += (1.0) * i0data[i1+x1.size()*(i4+x4.size()*(i0+x0.size()*(i2)))];
3323 }
3324 }
3325 }
3326 }
3327 }
3328 }
3329 }
3330 {
3331 std::unique_ptr<double[]> i0data = in(3)->get_block(x0, x5, x1, x4, x3, x2);
3332 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x0.size(), x5.size(), x1.size(), x4.size(), x3.size(), x2.size());
3333 }
3334 out()->add_block(odata, x0, x5, x1, x4, x3, x2);
3335 }
3336
compute()3337 void Task31::Task_local::compute() {
3338 const Index x5 = b(0);
3339 const Index x0 = b(1);
3340 const Index x1 = b(2);
3341 const Index x4 = b(3);
3342 const Index x3 = b(4);
3343 const Index x2 = b(5);
3344 // tensor label: Gamma169
3345 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x1, x4, x3, x2)]);
3346 std::fill_n(odata.get(), out()->get_size(x5, x0, x1, x4, x3, x2), 0.0);
3347 {
3348 if (x1 == x4) {
3349 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x2);
3350 for (int i2 = 0; i2 != x2.size(); ++i2) {
3351 for (int i3 = 0; i3 != x3.size(); ++i3) {
3352 for (int i4 = 0; i4 != x4.size(); ++i4) {
3353 for (int i0 = 0; i0 != x0.size(); ++i0) {
3354 for (int i5 = 0; i5 != x5.size(); ++i5) {
3355 odata[i5+x5.size()*(i0+x0.size()*(i4+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3356 += (2.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2)))];
3357 }
3358 }
3359 }
3360 }
3361 }
3362 }
3363 }
3364 {
3365 if (x3 == x4 && x1 == x2) {
3366 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
3367 for (int i2 = 0; i2 != x2.size(); ++i2) {
3368 for (int i4 = 0; i4 != x4.size(); ++i4) {
3369 for (int i0 = 0; i0 != x0.size(); ++i0) {
3370 for (int i5 = 0; i5 != x5.size(); ++i5) {
3371 odata[i5+x5.size()*(i0+x0.size()*(i2+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))]
3372 += (2.0) * i0data[i5+x5.size()*(i0)];
3373 }
3374 }
3375 }
3376 }
3377 }
3378 }
3379 {
3380 if (x1 == x2) {
3381 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x4);
3382 for (int i2 = 0; i2 != x2.size(); ++i2) {
3383 for (int i3 = 0; i3 != x3.size(); ++i3) {
3384 for (int i4 = 0; i4 != x4.size(); ++i4) {
3385 for (int i0 = 0; i0 != x0.size(); ++i0) {
3386 for (int i5 = 0; i5 != x5.size(); ++i5) {
3387 odata[i5+x5.size()*(i0+x0.size()*(i2+x1.size()*(i4+x4.size()*(i3+x3.size()*(i2)))))]
3388 += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i4)))];
3389 }
3390 }
3391 }
3392 }
3393 }
3394 }
3395 }
3396 {
3397 if (x3 == x4) {
3398 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x1, x2);
3399 for (int i2 = 0; i2 != x2.size(); ++i2) {
3400 for (int i4 = 0; i4 != x4.size(); ++i4) {
3401 for (int i1 = 0; i1 != x1.size(); ++i1) {
3402 for (int i0 = 0; i0 != x0.size(); ++i0) {
3403 for (int i5 = 0; i5 != x5.size(); ++i5) {
3404 odata[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i4+x4.size()*(i4+x3.size()*(i2)))))]
3405 += (-1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i1+x1.size()*(i2)))];
3406 }
3407 }
3408 }
3409 }
3410 }
3411 }
3412 }
3413 {
3414 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x0, x1, x4, x3, x2);
3415 sort_indices<0,1,2,3,4,5,1,1,-1,1>(i0data, odata, x5.size(), x0.size(), x1.size(), x4.size(), x3.size(), x2.size());
3416 }
3417 out()->add_block(odata, x5, x0, x1, x4, x3, x2);
3418 }
3419
compute()3420 void Task32::Task_local::compute() {
3421 const Index x5 = b(0);
3422 const Index x4 = b(1);
3423 const Index x3 = b(2);
3424 const Index x2 = b(3);
3425 const Index x1 = b(4);
3426 const Index x0 = b(5);
3427 // tensor label: Gamma172
3428 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x4, x3, x2, x1, x0)]);
3429 std::fill_n(odata.get(), out()->get_size(x5, x4, x3, x2, x1, x0), 0.0);
3430 {
3431 if (x1 == x4) {
3432 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x0, x3, x2);
3433 for (int i0 = 0; i0 != x0.size(); ++i0) {
3434 for (int i2 = 0; i2 != x2.size(); ++i2) {
3435 for (int i3 = 0; i3 != x3.size(); ++i3) {
3436 for (int i4 = 0; i4 != x4.size(); ++i4) {
3437 for (int i5 = 0; i5 != x5.size(); ++i5) {
3438 odata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i4+x1.size()*(i0)))))]
3439 += (1.0) * i0data[i5+x5.size()*(i0+x0.size()*(i3+x3.size()*(i2)))];
3440 }
3441 }
3442 }
3443 }
3444 }
3445 }
3446 }
3447 {
3448 if (x3 == x4 && x1 == x2) {
3449 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0);
3450 for (int i0 = 0; i0 != x0.size(); ++i0) {
3451 for (int i2 = 0; i2 != x2.size(); ++i2) {
3452 for (int i4 = 0; i4 != x4.size(); ++i4) {
3453 for (int i5 = 0; i5 != x5.size(); ++i5) {
3454 odata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2+x2.size()*(i2+x1.size()*(i0)))))]
3455 += (1.0) * i0data[i5+x5.size()*(i0)];
3456 }
3457 }
3458 }
3459 }
3460 }
3461 }
3462 {
3463 if (x1 == x2) {
3464 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x4, x3, x0);
3465 for (int i0 = 0; i0 != x0.size(); ++i0) {
3466 for (int i2 = 0; i2 != x2.size(); ++i2) {
3467 for (int i3 = 0; i3 != x3.size(); ++i3) {
3468 for (int i4 = 0; i4 != x4.size(); ++i4) {
3469 for (int i5 = 0; i5 != x5.size(); ++i5) {
3470 odata[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i2+x1.size()*(i0)))))]
3471 += (1.0) * i0data[i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i0)))];
3472 }
3473 }
3474 }
3475 }
3476 }
3477 }
3478 }
3479 {
3480 if (x3 == x4) {
3481 std::unique_ptr<double[]> i0data = in(1)->get_block(x5, x2, x1, x0);
3482 for (int i0 = 0; i0 != x0.size(); ++i0) {
3483 for (int i1 = 0; i1 != x1.size(); ++i1) {
3484 for (int i2 = 0; i2 != x2.size(); ++i2) {
3485 for (int i4 = 0; i4 != x4.size(); ++i4) {
3486 for (int i5 = 0; i5 != x5.size(); ++i5) {
3487 odata[i5+x5.size()*(i4+x4.size()*(i4+x3.size()*(i2+x2.size()*(i1+x1.size()*(i0)))))]
3488 += (1.0) * i0data[i5+x5.size()*(i2+x2.size()*(i1+x1.size()*(i0)))];
3489 }
3490 }
3491 }
3492 }
3493 }
3494 }
3495 }
3496 {
3497 std::unique_ptr<double[]> i0data = in(2)->get_block(x5, x4, x3, x2, x1, x0);
3498 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x4.size(), x3.size(), x2.size(), x1.size(), x0.size());
3499 }
3500 out()->add_block(odata, x5, x4, x3, x2, x1, x0);
3501 }
3502
compute()3503 void Task33::Task_local::compute() {
3504 const Index x5 = b(0);
3505 const Index x0 = b(1);
3506 const Index x4 = b(2);
3507 const Index x1 = b(3);
3508 const Index x3 = b(4);
3509 const Index x2 = b(5);
3510 // tensor label: Gamma230
3511 std::unique_ptr<double[]> odata(new double[out()->get_size(x5, x0, x4, x1, x3, x2)]);
3512 std::fill_n(odata.get(), out()->get_size(x5, x0, x4, x1, x3, x2), 0.0);
3513 {
3514 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x0, x4, x1, x3, x2);
3515 sort_indices<0,1,2,3,4,5,1,1,1,1>(i0data, odata, x5.size(), x0.size(), x4.size(), x1.size(), x3.size(), x2.size());
3516 }
3517 out()->add_block(odata, x5, x0, x4, x1, x3, x2);
3518 }
3519
compute()3520 void Task34::Task_local::compute() {
3521 const Index x7 = b(0);
3522 const Index x6 = b(1);
3523 const Index x2 = b(2);
3524 const Index x5 = b(3);
3525 const Index x4 = b(4);
3526 const Index x3 = b(5);
3527 const Index x1 = b(6);
3528 const Index x0 = b(7);
3529 // tensor label: Gamma143
3530 std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x6, x2, x5, x4, x3, x1, x0)]);
3531 std::fill_n(odata.get(), out()->get_size(x7, x6, x2, x5, x4, x3, x1, x0), 0.0);
3532 {
3533 if (x2 == x6 && x1 == x5) {
3534 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x4, x3);
3535 for (int i0 = 0; i0 != x0.size(); ++i0) {
3536 for (int i3 = 0; i3 != x3.size(); ++i3) {
3537 for (int i4 = 0; i4 != x4.size(); ++i4) {
3538 for (int i5 = 0; i5 != x5.size(); ++i5) {
3539 for (int i6 = 0; i6 != x6.size(); ++i6) {
3540 for (int i7 = 0; i7 != x7.size(); ++i7) {
3541 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))))]
3542 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i4+x4.size()*(i3)))];
3543 }
3544 }
3545 }
3546 }
3547 }
3548 }
3549 }
3550 }
3551 {
3552 if (x2 == x5 && x1 == x6) {
3553 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x4, x3);
3554 for (int i0 = 0; i0 != x0.size(); ++i0) {
3555 for (int i3 = 0; i3 != x3.size(); ++i3) {
3556 for (int i4 = 0; i4 != x4.size(); ++i4) {
3557 for (int i5 = 0; i5 != x5.size(); ++i5) {
3558 for (int i6 = 0; i6 != x6.size(); ++i6) {
3559 for (int i7 = 0; i7 != x7.size(); ++i7) {
3560 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i6+x1.size()*(i0)))))))]
3561 += (2.0) * i0data[i7+x7.size()*(i0+x0.size()*(i4+x4.size()*(i3)))];
3562 }
3563 }
3564 }
3565 }
3566 }
3567 }
3568 }
3569 }
3570 {
3571 if (x1 == x3 && x2 == x5 && x4 == x6) {
3572 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
3573 for (int i0 = 0; i0 != x0.size(); ++i0) {
3574 for (int i3 = 0; i3 != x3.size(); ++i3) {
3575 for (int i5 = 0; i5 != x5.size(); ++i5) {
3576 for (int i6 = 0; i6 != x6.size(); ++i6) {
3577 for (int i7 = 0; i7 != x7.size(); ++i7) {
3578 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i6+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))))]
3579 += (2.0) * i0data[i7+x7.size()*(i0)];
3580 }
3581 }
3582 }
3583 }
3584 }
3585 }
3586 }
3587 {
3588 if (x2 == x5 && x1 == x3) {
3589 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x4, x0);
3590 for (int i0 = 0; i0 != x0.size(); ++i0) {
3591 for (int i3 = 0; i3 != x3.size(); ++i3) {
3592 for (int i4 = 0; i4 != x4.size(); ++i4) {
3593 for (int i5 = 0; i5 != x5.size(); ++i5) {
3594 for (int i6 = 0; i6 != x6.size(); ++i6) {
3595 for (int i7 = 0; i7 != x7.size(); ++i7) {
3596 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))))]
3597 += (2.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i0)))];
3598 }
3599 }
3600 }
3601 }
3602 }
3603 }
3604 }
3605 }
3606 {
3607 if (x4 == x5 && x2 == x6 && x1 == x3) {
3608 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
3609 for (int i0 = 0; i0 != x0.size(); ++i0) {
3610 for (int i3 = 0; i3 != x3.size(); ++i3) {
3611 for (int i5 = 0; i5 != x5.size(); ++i5) {
3612 for (int i6 = 0; i6 != x6.size(); ++i6) {
3613 for (int i7 = 0; i7 != x7.size(); ++i7) {
3614 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))))]
3615 += (-1.0) * i0data[i7+x7.size()*(i0)];
3616 }
3617 }
3618 }
3619 }
3620 }
3621 }
3622 }
3623 {
3624 if (x2 == x6 && x1 == x3) {
3625 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x5, x4, x0);
3626 for (int i0 = 0; i0 != x0.size(); ++i0) {
3627 for (int i3 = 0; i3 != x3.size(); ++i3) {
3628 for (int i4 = 0; i4 != x4.size(); ++i4) {
3629 for (int i5 = 0; i5 != x5.size(); ++i5) {
3630 for (int i6 = 0; i6 != x6.size(); ++i6) {
3631 for (int i7 = 0; i7 != x7.size(); ++i7) {
3632 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))))]
3633 += (-1.0) * i0data[i7+x7.size()*(i5+x5.size()*(i4+x4.size()*(i0)))];
3634 }
3635 }
3636 }
3637 }
3638 }
3639 }
3640 }
3641 }
3642 {
3643 if (x4 == x5 && x1 == x3) {
3644 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x2, x0);
3645 for (int i0 = 0; i0 != x0.size(); ++i0) {
3646 for (int i3 = 0; i3 != x3.size(); ++i3) {
3647 for (int i5 = 0; i5 != x5.size(); ++i5) {
3648 for (int i2 = 0; i2 != x2.size(); ++i2) {
3649 for (int i6 = 0; i6 != x6.size(); ++i6) {
3650 for (int i7 = 0; i7 != x7.size(); ++i7) {
3651 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))))]
3652 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i0)))];
3653 }
3654 }
3655 }
3656 }
3657 }
3658 }
3659 }
3660 }
3661 {
3662 if (x4 == x6 && x1 == x3) {
3663 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x2, x5);
3664 for (int i0 = 0; i0 != x0.size(); ++i0) {
3665 for (int i3 = 0; i3 != x3.size(); ++i3) {
3666 for (int i5 = 0; i5 != x5.size(); ++i5) {
3667 for (int i2 = 0; i2 != x2.size(); ++i2) {
3668 for (int i6 = 0; i6 != x6.size(); ++i6) {
3669 for (int i7 = 0; i7 != x7.size(); ++i7) {
3670 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i6+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))))]
3671 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i5)))];
3672 }
3673 }
3674 }
3675 }
3676 }
3677 }
3678 }
3679 }
3680 {
3681 if (x1 == x3) {
3682 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x2, x5, x4, x0);
3683 for (int i0 = 0; i0 != x0.size(); ++i0) {
3684 for (int i3 = 0; i3 != x3.size(); ++i3) {
3685 for (int i4 = 0; i4 != x4.size(); ++i4) {
3686 for (int i5 = 0; i5 != x5.size(); ++i5) {
3687 for (int i2 = 0; i2 != x2.size(); ++i2) {
3688 for (int i6 = 0; i6 != x6.size(); ++i6) {
3689 for (int i7 = 0; i7 != x7.size(); ++i7) {
3690 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i3+x1.size()*(i0)))))))]
3691 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i0)))))];
3692 }
3693 }
3694 }
3695 }
3696 }
3697 }
3698 }
3699 }
3700 }
3701 {
3702 if (x4 == x6 && x2 == x3 && x1 == x5) {
3703 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
3704 for (int i0 = 0; i0 != x0.size(); ++i0) {
3705 for (int i3 = 0; i3 != x3.size(); ++i3) {
3706 for (int i5 = 0; i5 != x5.size(); ++i5) {
3707 for (int i6 = 0; i6 != x6.size(); ++i6) {
3708 for (int i7 = 0; i7 != x7.size(); ++i7) {
3709 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i6+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))))]
3710 += (-1.0) * i0data[i7+x7.size()*(i0)];
3711 }
3712 }
3713 }
3714 }
3715 }
3716 }
3717 }
3718 {
3719 if (x2 == x3 && x1 == x5) {
3720 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x4, x0);
3721 for (int i0 = 0; i0 != x0.size(); ++i0) {
3722 for (int i3 = 0; i3 != x3.size(); ++i3) {
3723 for (int i4 = 0; i4 != x4.size(); ++i4) {
3724 for (int i5 = 0; i5 != x5.size(); ++i5) {
3725 for (int i6 = 0; i6 != x6.size(); ++i6) {
3726 for (int i7 = 0; i7 != x7.size(); ++i7) {
3727 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))))]
3728 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i0)))];
3729 }
3730 }
3731 }
3732 }
3733 }
3734 }
3735 }
3736 }
3737 {
3738 if (x4 == x6 && x1 == x5) {
3739 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x2, x0);
3740 for (int i0 = 0; i0 != x0.size(); ++i0) {
3741 for (int i3 = 0; i3 != x3.size(); ++i3) {
3742 for (int i5 = 0; i5 != x5.size(); ++i5) {
3743 for (int i2 = 0; i2 != x2.size(); ++i2) {
3744 for (int i6 = 0; i6 != x6.size(); ++i6) {
3745 for (int i7 = 0; i7 != x7.size(); ++i7) {
3746 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i6+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))))]
3747 += (-1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i2+x2.size()*(i0)))];
3748 }
3749 }
3750 }
3751 }
3752 }
3753 }
3754 }
3755 }
3756 {
3757 if (x1 == x5) {
3758 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x4, x3, x2, x0);
3759 for (int i0 = 0; i0 != x0.size(); ++i0) {
3760 for (int i3 = 0; i3 != x3.size(); ++i3) {
3761 for (int i4 = 0; i4 != x4.size(); ++i4) {
3762 for (int i5 = 0; i5 != x5.size(); ++i5) {
3763 for (int i2 = 0; i2 != x2.size(); ++i2) {
3764 for (int i6 = 0; i6 != x6.size(); ++i6) {
3765 for (int i7 = 0; i7 != x7.size(); ++i7) {
3766 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i5+x1.size()*(i0)))))))]
3767 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i3+x3.size()*(i2+x2.size()*(i0)))))];
3768 }
3769 }
3770 }
3771 }
3772 }
3773 }
3774 }
3775 }
3776 }
3777 {
3778 if (x4 == x5 && x2 == x3 && x1 == x6) {
3779 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0);
3780 for (int i0 = 0; i0 != x0.size(); ++i0) {
3781 for (int i3 = 0; i3 != x3.size(); ++i3) {
3782 for (int i5 = 0; i5 != x5.size(); ++i5) {
3783 for (int i6 = 0; i6 != x6.size(); ++i6) {
3784 for (int i7 = 0; i7 != x7.size(); ++i7) {
3785 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i6+x1.size()*(i0)))))))]
3786 += (2.0) * i0data[i7+x7.size()*(i0)];
3787 }
3788 }
3789 }
3790 }
3791 }
3792 }
3793 }
3794 {
3795 if (x2 == x3 && x1 == x6) {
3796 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x4, x5);
3797 for (int i0 = 0; i0 != x0.size(); ++i0) {
3798 for (int i3 = 0; i3 != x3.size(); ++i3) {
3799 for (int i4 = 0; i4 != x4.size(); ++i4) {
3800 for (int i5 = 0; i5 != x5.size(); ++i5) {
3801 for (int i6 = 0; i6 != x6.size(); ++i6) {
3802 for (int i7 = 0; i7 != x7.size(); ++i7) {
3803 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i6+x1.size()*(i0)))))))]
3804 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i4+x4.size()*(i5)))];
3805 }
3806 }
3807 }
3808 }
3809 }
3810 }
3811 }
3812 }
3813 {
3814 if (x4 == x5 && x1 == x6) {
3815 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x2, x3);
3816 for (int i0 = 0; i0 != x0.size(); ++i0) {
3817 for (int i3 = 0; i3 != x3.size(); ++i3) {
3818 for (int i5 = 0; i5 != x5.size(); ++i5) {
3819 for (int i2 = 0; i2 != x2.size(); ++i2) {
3820 for (int i6 = 0; i6 != x6.size(); ++i6) {
3821 for (int i7 = 0; i7 != x7.size(); ++i7) {
3822 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i6+x1.size()*(i0)))))))]
3823 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i3)))];
3824 }
3825 }
3826 }
3827 }
3828 }
3829 }
3830 }
3831 }
3832 {
3833 if (x1 == x6) {
3834 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x0, x2, x5, x4, x3);
3835 for (int i0 = 0; i0 != x0.size(); ++i0) {
3836 for (int i3 = 0; i3 != x3.size(); ++i3) {
3837 for (int i4 = 0; i4 != x4.size(); ++i4) {
3838 for (int i5 = 0; i5 != x5.size(); ++i5) {
3839 for (int i2 = 0; i2 != x2.size(); ++i2) {
3840 for (int i6 = 0; i6 != x6.size(); ++i6) {
3841 for (int i7 = 0; i7 != x7.size(); ++i7) {
3842 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i6+x1.size()*(i0)))))))]
3843 += (-1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i2+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3)))))];
3844 }
3845 }
3846 }
3847 }
3848 }
3849 }
3850 }
3851 }
3852 }
3853 {
3854 if (x4 == x5 && x2 == x3) {
3855 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x6, x1, x0);
3856 for (int i0 = 0; i0 != x0.size(); ++i0) {
3857 for (int i1 = 0; i1 != x1.size(); ++i1) {
3858 for (int i3 = 0; i3 != x3.size(); ++i3) {
3859 for (int i5 = 0; i5 != x5.size(); ++i5) {
3860 for (int i6 = 0; i6 != x6.size(); ++i6) {
3861 for (int i7 = 0; i7 != x7.size(); ++i7) {
3862 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
3863 += (2.0) * i0data[i7+x7.size()*(i6+x6.size()*(i1+x1.size()*(i0)))];
3864 }
3865 }
3866 }
3867 }
3868 }
3869 }
3870 }
3871 }
3872 {
3873 if (x4 == x6 && x2 == x3) {
3874 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x5, x1, x0);
3875 for (int i0 = 0; i0 != x0.size(); ++i0) {
3876 for (int i1 = 0; i1 != x1.size(); ++i1) {
3877 for (int i3 = 0; i3 != x3.size(); ++i3) {
3878 for (int i5 = 0; i5 != x5.size(); ++i5) {
3879 for (int i6 = 0; i6 != x6.size(); ++i6) {
3880 for (int i7 = 0; i7 != x7.size(); ++i7) {
3881 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i6+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
3882 += (-1.0) * i0data[i7+x7.size()*(i5+x5.size()*(i1+x1.size()*(i0)))];
3883 }
3884 }
3885 }
3886 }
3887 }
3888 }
3889 }
3890 }
3891 {
3892 if (x2 == x3) {
3893 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x4, x5, x1, x0);
3894 for (int i0 = 0; i0 != x0.size(); ++i0) {
3895 for (int i1 = 0; i1 != x1.size(); ++i1) {
3896 for (int i3 = 0; i3 != x3.size(); ++i3) {
3897 for (int i4 = 0; i4 != x4.size(); ++i4) {
3898 for (int i5 = 0; i5 != x5.size(); ++i5) {
3899 for (int i6 = 0; i6 != x6.size(); ++i6) {
3900 for (int i7 = 0; i7 != x7.size(); ++i7) {
3901 odata[i7+x7.size()*(i6+x6.size()*(i3+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
3902 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))];
3903 }
3904 }
3905 }
3906 }
3907 }
3908 }
3909 }
3910 }
3911 }
3912 {
3913 if (x4 == x6 && x2 == x5) {
3914 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x1, x0);
3915 for (int i0 = 0; i0 != x0.size(); ++i0) {
3916 for (int i1 = 0; i1 != x1.size(); ++i1) {
3917 for (int i3 = 0; i3 != x3.size(); ++i3) {
3918 for (int i5 = 0; i5 != x5.size(); ++i5) {
3919 for (int i6 = 0; i6 != x6.size(); ++i6) {
3920 for (int i7 = 0; i7 != x7.size(); ++i7) {
3921 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i6+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
3922 += (2.0) * i0data[i7+x7.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
3923 }
3924 }
3925 }
3926 }
3927 }
3928 }
3929 }
3930 }
3931 {
3932 if (x2 == x5) {
3933 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x4, x3, x1, x0);
3934 for (int i0 = 0; i0 != x0.size(); ++i0) {
3935 for (int i1 = 0; i1 != x1.size(); ++i1) {
3936 for (int i3 = 0; i3 != x3.size(); ++i3) {
3937 for (int i4 = 0; i4 != x4.size(); ++i4) {
3938 for (int i5 = 0; i5 != x5.size(); ++i5) {
3939 for (int i6 = 0; i6 != x6.size(); ++i6) {
3940 for (int i7 = 0; i7 != x7.size(); ++i7) {
3941 odata[i7+x7.size()*(i6+x6.size()*(i5+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
3942 += (2.0) * i0data[i7+x7.size()*(i6+x6.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))];
3943 }
3944 }
3945 }
3946 }
3947 }
3948 }
3949 }
3950 }
3951 }
3952 {
3953 if (x4 == x5 && x2 == x6) {
3954 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x3, x1, x0);
3955 for (int i0 = 0; i0 != x0.size(); ++i0) {
3956 for (int i1 = 0; i1 != x1.size(); ++i1) {
3957 for (int i3 = 0; i3 != x3.size(); ++i3) {
3958 for (int i5 = 0; i5 != x5.size(); ++i5) {
3959 for (int i6 = 0; i6 != x6.size(); ++i6) {
3960 for (int i7 = 0; i7 != x7.size(); ++i7) {
3961 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
3962 += (-1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i1+x1.size()*(i0)))];
3963 }
3964 }
3965 }
3966 }
3967 }
3968 }
3969 }
3970 }
3971 {
3972 if (x2 == x6) {
3973 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x5, x4, x3, x1, x0);
3974 for (int i0 = 0; i0 != x0.size(); ++i0) {
3975 for (int i1 = 0; i1 != x1.size(); ++i1) {
3976 for (int i3 = 0; i3 != x3.size(); ++i3) {
3977 for (int i4 = 0; i4 != x4.size(); ++i4) {
3978 for (int i5 = 0; i5 != x5.size(); ++i5) {
3979 for (int i6 = 0; i6 != x6.size(); ++i6) {
3980 for (int i7 = 0; i7 != x7.size(); ++i7) {
3981 odata[i7+x7.size()*(i6+x6.size()*(i6+x2.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
3982 += (-1.0) * i0data[i7+x7.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))];
3983 }
3984 }
3985 }
3986 }
3987 }
3988 }
3989 }
3990 }
3991 }
3992 {
3993 if (x4 == x5) {
3994 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x6, x2, x3, x1, x0);
3995 for (int i0 = 0; i0 != x0.size(); ++i0) {
3996 for (int i1 = 0; i1 != x1.size(); ++i1) {
3997 for (int i3 = 0; i3 != x3.size(); ++i3) {
3998 for (int i5 = 0; i5 != x5.size(); ++i5) {
3999 for (int i2 = 0; i2 != x2.size(); ++i2) {
4000 for (int i6 = 0; i6 != x6.size(); ++i6) {
4001 for (int i7 = 0; i7 != x7.size(); ++i7) {
4002 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
4003 += (-1.0) * i0data[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))];
4004 }
4005 }
4006 }
4007 }
4008 }
4009 }
4010 }
4011 }
4012 }
4013 {
4014 if (x4 == x6) {
4015 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x3, x2, x5, x1, x0);
4016 for (int i0 = 0; i0 != x0.size(); ++i0) {
4017 for (int i1 = 0; i1 != x1.size(); ++i1) {
4018 for (int i3 = 0; i3 != x3.size(); ++i3) {
4019 for (int i5 = 0; i5 != x5.size(); ++i5) {
4020 for (int i2 = 0; i2 != x2.size(); ++i2) {
4021 for (int i6 = 0; i6 != x6.size(); ++i6) {
4022 for (int i7 = 0; i7 != x7.size(); ++i7) {
4023 odata[i7+x7.size()*(i6+x6.size()*(i2+x2.size()*(i5+x5.size()*(i6+x4.size()*(i3+x3.size()*(i1+x1.size()*(i0)))))))]
4024 += (-1.0) * i0data[i7+x7.size()*(i3+x3.size()*(i2+x2.size()*(i5+x5.size()*(i1+x1.size()*(i0)))))];
4025 }
4026 }
4027 }
4028 }
4029 }
4030 }
4031 }
4032 }
4033 }
4034 {
4035 std::unique_ptr<double[]> i0data = in(3)->get_block(x7, x6, x2, x5, x4, x3, x1, x0);
4036 sort_indices<0,1,2,3,4,5,6,7,1,1,-1,1>(i0data, odata, x7.size(), x6.size(), x2.size(), x5.size(), x4.size(), x3.size(), x1.size(), x0.size());
4037 }
4038 out()->add_block(odata, x7, x6, x2, x5, x4, x3, x1, x0);
4039 }
4040
compute()4041 void Task35::Task_local::compute() {
4042 const Index x7 = b(0);
4043 const Index x0 = b(1);
4044 const Index x6 = b(2);
4045 const Index x5 = b(3);
4046 const Index x4 = b(4);
4047 const Index x3 = b(5);
4048 const Index x2 = b(6);
4049 const Index x1 = b(7);
4050 // tensor label: Gamma196
4051 std::unique_ptr<double[]> odata(new double[out()->get_size(x7, x0, x6, x5, x4, x3, x2, x1)]);
4052 std::fill_n(odata.get(), out()->get_size(x7, x0, x6, x5, x4, x3, x2, x1), 0.0);
4053 {
4054 if (x2 == x5) {
4055 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x6, x1, x4, x3);
4056 for (int i1 = 0; i1 != x1.size(); ++i1) {
4057 for (int i3 = 0; i3 != x3.size(); ++i3) {
4058 for (int i4 = 0; i4 != x4.size(); ++i4) {
4059 for (int i5 = 0; i5 != x5.size(); ++i5) {
4060 for (int i6 = 0; i6 != x6.size(); ++i6) {
4061 for (int i0 = 0; i0 != x0.size(); ++i0) {
4062 for (int i7 = 0; i7 != x7.size(); ++i7) {
4063 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i5+x2.size()*(i1)))))))]
4064 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1+x1.size()*(i4+x4.size()*(i3)))))];
4065 }
4066 }
4067 }
4068 }
4069 }
4070 }
4071 }
4072 }
4073 }
4074 {
4075 if (x4 == x5 && x2 == x3) {
4076 std::unique_ptr<double[]> i0data = in(0)->get_block(x7, x0, x6, x1);
4077 for (int i1 = 0; i1 != x1.size(); ++i1) {
4078 for (int i3 = 0; i3 != x3.size(); ++i3) {
4079 for (int i5 = 0; i5 != x5.size(); ++i5) {
4080 for (int i6 = 0; i6 != x6.size(); ++i6) {
4081 for (int i0 = 0; i0 != x0.size(); ++i0) {
4082 for (int i7 = 0; i7 != x7.size(); ++i7) {
4083 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i3+x2.size()*(i1)))))))]
4084 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i1)))];
4085 }
4086 }
4087 }
4088 }
4089 }
4090 }
4091 }
4092 }
4093 {
4094 if (x2 == x3) {
4095 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x6, x5, x4, x1);
4096 for (int i1 = 0; i1 != x1.size(); ++i1) {
4097 for (int i3 = 0; i3 != x3.size(); ++i3) {
4098 for (int i4 = 0; i4 != x4.size(); ++i4) {
4099 for (int i5 = 0; i5 != x5.size(); ++i5) {
4100 for (int i6 = 0; i6 != x6.size(); ++i6) {
4101 for (int i0 = 0; i0 != x0.size(); ++i0) {
4102 for (int i7 = 0; i7 != x7.size(); ++i7) {
4103 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i3+x3.size()*(i3+x2.size()*(i1)))))))]
4104 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i4+x4.size()*(i1)))))];
4105 }
4106 }
4107 }
4108 }
4109 }
4110 }
4111 }
4112 }
4113 }
4114 {
4115 if (x4 == x5) {
4116 std::unique_ptr<double[]> i0data = in(1)->get_block(x7, x0, x6, x3, x2, x1);
4117 for (int i1 = 0; i1 != x1.size(); ++i1) {
4118 for (int i2 = 0; i2 != x2.size(); ++i2) {
4119 for (int i3 = 0; i3 != x3.size(); ++i3) {
4120 for (int i5 = 0; i5 != x5.size(); ++i5) {
4121 for (int i6 = 0; i6 != x6.size(); ++i6) {
4122 for (int i0 = 0; i0 != x0.size(); ++i0) {
4123 for (int i7 = 0; i7 != x7.size(); ++i7) {
4124 odata[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i5+x5.size()*(i5+x4.size()*(i3+x3.size()*(i2+x2.size()*(i1)))))))]
4125 += (1.0) * i0data[i7+x7.size()*(i0+x0.size()*(i6+x6.size()*(i3+x3.size()*(i2+x2.size()*(i1)))))];
4126 }
4127 }
4128 }
4129 }
4130 }
4131 }
4132 }
4133 }
4134 }
4135 {
4136 std::unique_ptr<double[]> i0data = in(2)->get_block(x7, x0, x6, x5, x4, x3, x2, x1);
4137 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(), x3.size(), x2.size(), x1.size());
4138 }
4139 out()->add_block(odata, x7, x0, x6, x5, x4, x3, x2, x1);
4140 }
4141
compute()4142 void Task36::Task_local::compute() {
4143 const Index x0 = b(0);
4144 const Index x3 = b(1);
4145 const Index x2 = b(2);
4146 const Index x1 = b(3);
4147 // tensor label: Gamma152
4148 std::unique_ptr<double[]> odata(new double[out()->get_size(x0, x3, x2, x1)]);
4149 std::fill_n(odata.get(), out()->get_size(x0, x3, x2, x1), 0.0);
4150 {
4151 if (x0 == x3) {
4152 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x1);
4153 for (int i1 = 0; i1 != x1.size(); ++i1) {
4154 for (int i2 = 0; i2 != x2.size(); ++i2) {
4155 for (int i3 = 0; i3 != x3.size(); ++i3) {
4156 odata[i3+x0.size()*(i3+x3.size()*(i2+x2.size()*(i1)))]
4157 += (2.0) * i0data[i2+x2.size()*(i1)];
4158 }
4159 }
4160 }
4161 }
4162 }
4163 {
4164 // rdm0 non-merged case
4165 if (x2 == x3 && x0 == x1) {
4166 std::unique_ptr<double[]> i0data = in(0)->get_block();
4167 for (int i1 = 0; i1 != x1.size(); ++i1) {
4168 for (int i3 = 0; i3 != x3.size(); ++i3) {
4169 odata[i1+x0.size()*(i3+x3.size()*(i3+x2.size()*(i1)))] += 2.0 * i0data[0];
4170 }
4171 }
4172 }
4173 }
4174 {
4175 if (x0 == x1) {
4176 std::unique_ptr<double[]> i0data = in(1)->get_block(x2, x3);
4177 for (int i1 = 0; i1 != x1.size(); ++i1) {
4178 for (int i2 = 0; i2 != x2.size(); ++i2) {
4179 for (int i3 = 0; i3 != x3.size(); ++i3) {
4180 odata[i1+x0.size()*(i3+x3.size()*(i2+x2.size()*(i1)))]
4181 += (-1.0) * i0data[i2+x2.size()*(i3)];
4182 }
4183 }
4184 }
4185 }
4186 }
4187 {
4188 if (x2 == x3) {
4189 std::unique_ptr<double[]> i0data = in(1)->get_block(x0, x1);
4190 for (int i1 = 0; i1 != x1.size(); ++i1) {
4191 for (int i3 = 0; i3 != x3.size(); ++i3) {
4192 for (int i0 = 0; i0 != x0.size(); ++i0) {
4193 odata[i0+x0.size()*(i3+x3.size()*(i3+x2.size()*(i1)))]
4194 += (-1.0) * i0data[i0+x0.size()*(i1)];
4195 }
4196 }
4197 }
4198 }
4199 }
4200 {
4201 std::unique_ptr<double[]> i0data = in(2)->get_block(x0, x3, x2, x1);
4202 sort_indices<0,1,2,3,1,1,-1,1>(i0data, odata, x0.size(), x3.size(), x2.size(), x1.size());
4203 }
4204 out()->add_block(odata, x0, x3, x2, x1);
4205 }
4206
compute()4207 void Task38::Task_local::compute() {
4208 const Index c2 = b(0);
4209 const Index x1 = b(1);
4210 const Index c1 = b(2);
4211 const Index x0 = b(3);
4212 // tensor label: r
4213 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x1, c1, x0)]);
4214 std::fill_n(odata.get(), out()->get_size(c2, x1, c1, x0), 0.0);
4215 {
4216 // tensor label: I0
4217 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, c2, x0, x1);
4218 sort_indices<1,3,0,2,1,1,1,1>(i0data, odata, c1.size(), c2.size(), x0.size(), x1.size());
4219 }
4220 out()->add_block(odata, c2, x1, c1, x0);
4221 }
4222
compute()4223 void Task39::Task_local::compute() {
4224 const Index c1 = b(0);
4225 const Index c2 = b(1);
4226 const Index x0 = b(2);
4227 const Index x1 = b(3);
4228 // tensor label: I0
4229 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, c2, x0, x1)]);
4230 std::fill_n(odata.get(), out()->get_size(c1, c2, x0, x1), 0.0);
4231 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, c2, x0, x1)]);
4232 std::fill_n(odata_sorted.get(), out()->get_size(c1, c2, x0, x1), 0.0);
4233 for (auto& x5 : *range_[1]) {
4234 for (auto& x4 : *range_[1]) {
4235 // tensor label: Gamma0
4236 std::unique_ptr<double[]> i0data = in(0)->get_block(x0, x5, x1, x4);
4237 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x0, x5, x1, x4)]);
4238 sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, x0.size(), x5.size(), x1.size(), x4.size());
4239 // tensor label: t2
4240 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x5, c2, x4);
4241 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x5, c2, x4)]);
4242 sort_indices<1,3,0,2,0,1,2,1>(i1data, i1data_sorted, c1.size(), x5.size(), c2.size(), x4.size());
4243 dgemm_("T", "N", x0.size()*x1.size(), c1.size()*c2.size(), x5.size()*x4.size(),
4244 1.0, i0data_sorted, x5.size()*x4.size(), i1data_sorted, x5.size()*x4.size(),
4245 1.0, odata_sorted, x0.size()*x1.size());
4246 }
4247 }
4248 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c1.size(), c2.size());
4249 out()->add_block(odata, c1, c2, x0, x1);
4250 }
4251
compute()4252 void Task40::Task_local::compute() {
4253 const Index c1 = b(0);
4254 const Index c2 = b(1);
4255 const Index x0 = b(2);
4256 const Index x1 = b(3);
4257 // tensor label: I0
4258 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, c2, x0, x1)]);
4259 std::fill_n(odata.get(), out()->get_size(c1, c2, x0, x1), 0.0);
4260 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, c2, x0, x1)]);
4261 std::fill_n(odata_sorted.get(), out()->get_size(c1, c2, x0, x1), 0.0);
4262 for (auto& x3 : *range_[1]) {
4263 for (auto& x2 : *range_[1]) {
4264 // tensor label: Gamma92
4265 std::unique_ptr<double[]> i0data = in(0)->get_block(x0, x3, x1, x2);
4266 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x0, x3, x1, x2)]);
4267 sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, x0.size(), x3.size(), x1.size(), x2.size());
4268 // tensor label: t2
4269 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x3, c2, x2);
4270 dscal_(c1.size()*x3.size()*c2.size()*x2.size(), e0_, i1data.get(), 1);
4271 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x3, c2, x2)]);
4272 sort_indices<1,3,0,2,0,1,-2,1>(i1data, i1data_sorted, c1.size(), x3.size(), c2.size(), x2.size());
4273 dgemm_("T", "N", x0.size()*x1.size(), c1.size()*c2.size(), x3.size()*x2.size(),
4274 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
4275 1.0, odata_sorted, x0.size()*x1.size());
4276 }
4277 }
4278 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c1.size(), c2.size());
4279 out()->add_block(odata, c1, c2, x0, x1);
4280 }
4281
compute()4282 void Task41::Task_local::compute() {
4283 const Index c2 = b(0);
4284 const Index x1 = b(1);
4285 const Index c1 = b(2);
4286 const Index x0 = b(3);
4287 // tensor label: r
4288 std::unique_ptr<double[]> odata(new double[out()->get_size(c2, x1, c1, x0)]);
4289 std::fill_n(odata.get(), out()->get_size(c2, x1, c1, x0), 0.0);
4290 {
4291 // tensor label: I2
4292 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x0, x1, c2);
4293 sort_indices<3,2,0,1,1,1,1,1>(i0data, odata, c1.size(), x0.size(), x1.size(), c2.size());
4294 }
4295 {
4296 // tensor label: I2
4297 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, x1, x0, c1);
4298 sort_indices<0,1,3,2,1,1,1,1>(i0data, odata, c2.size(), x1.size(), x0.size(), c1.size());
4299 }
4300 out()->add_block(odata, c2, x1, c1, x0);
4301 }
4302
compute()4303 void Task42::Task_local::compute() {
4304 const Index c1 = b(0);
4305 const Index x0 = b(1);
4306 const Index x1 = b(2);
4307 const Index c2 = b(3);
4308 // tensor label: I2
4309 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, c2)]);
4310 std::fill_n(odata.get(), out()->get_size(c1, x0, x1, c2), 0.0);
4311 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, c2)]);
4312 std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, c2), 0.0);
4313 for (auto& c3 : *range_[0]) {
4314 // tensor label: f1
4315 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, c3);
4316 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c2, c3)]);
4317 sort_indices<1,0,0,1,1,1>(i0data, i0data_sorted, c2.size(), c3.size());
4318 // tensor label: I3
4319 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, c3, x0, x1);
4320 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, c3, x0, x1)]);
4321 sort_indices<1,0,2,3,0,1,1,1>(i1data, i1data_sorted, c1.size(), c3.size(), x0.size(), x1.size());
4322 dgemm_("T", "N", c2.size(), c1.size()*x0.size()*x1.size(), c3.size(),
4323 1.0, i0data_sorted, c3.size(), i1data_sorted, c3.size(),
4324 1.0, odata_sorted, c2.size());
4325 }
4326 sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, c2.size(), c1.size(), x0.size(), x1.size());
4327 out()->add_block(odata, c1, x0, x1, c2);
4328 }
4329
compute()4330 void Task43::Task_local::compute() {
4331 const Index c1 = b(0);
4332 const Index c3 = b(1);
4333 const Index x0 = b(2);
4334 const Index x1 = b(3);
4335 // tensor label: I3
4336 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, c3, x0, x1)]);
4337 std::fill_n(odata.get(), out()->get_size(c1, c3, x0, x1), 0.0);
4338 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, c3, x0, x1)]);
4339 std::fill_n(odata_sorted.get(), out()->get_size(c1, c3, x0, x1), 0.0);
4340 for (auto& x3 : *range_[1]) {
4341 for (auto& x2 : *range_[1]) {
4342 // tensor label: Gamma92
4343 std::unique_ptr<double[]> i0data = in(0)->get_block(x0, x3, x1, x2);
4344 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x0, x3, x1, x2)]);
4345 sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, x0.size(), x3.size(), x1.size(), x2.size());
4346 // tensor label: t2
4347 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x3, c3, x2);
4348 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x3, c3, x2)]);
4349 sort_indices<1,3,0,2,0,1,-2,1>(i1data, i1data_sorted, c1.size(), x3.size(), c3.size(), x2.size());
4350 dgemm_("T", "N", x0.size()*x1.size(), c1.size()*c3.size(), x3.size()*x2.size(),
4351 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
4352 1.0, odata_sorted, x0.size()*x1.size());
4353 }
4354 }
4355 sort_indices<2,3,0,1,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), c1.size(), c3.size());
4356 out()->add_block(odata, c1, c3, x0, x1);
4357 }
4358
compute()4359 void Task44::Task_local::compute() {
4360 const Index c1 = b(0);
4361 const Index x0 = b(1);
4362 const Index x1 = b(2);
4363 const Index c2 = b(3);
4364 // tensor label: I2
4365 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, c2)]);
4366 std::fill_n(odata.get(), out()->get_size(c1, x0, x1, c2), 0.0);
4367 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, c2)]);
4368 std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, c2), 0.0);
4369 for (auto& x2 : *range_[1]) {
4370 // tensor label: f1
4371 std::unique_ptr<double[]> i0data = in(0)->get_block(c2, x2);
4372 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(c2, x2)]);
4373 sort_indices<1,0,0,1,1,1>(i0data, i0data_sorted, c2.size(), x2.size());
4374 // tensor label: I6
4375 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x0, x1, x2);
4376 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x0, x1, x2)]);
4377 sort_indices<3,0,1,2,0,1,1,1>(i1data, i1data_sorted, c1.size(), x0.size(), x1.size(), x2.size());
4378 dgemm_("T", "N", c2.size(), c1.size()*x0.size()*x1.size(), x2.size(),
4379 1.0, i0data_sorted, x2.size(), i1data_sorted, x2.size(),
4380 1.0, odata_sorted, c2.size());
4381 }
4382 sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, c2.size(), c1.size(), x0.size(), x1.size());
4383 out()->add_block(odata, c1, x0, x1, c2);
4384 }
4385
compute()4386 void Task45::Task_local::compute() {
4387 const Index c1 = b(0);
4388 const Index x0 = b(1);
4389 const Index x1 = b(2);
4390 const Index x2 = b(3);
4391 // tensor label: I6
4392 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, x2)]);
4393 std::fill_n(odata.get(), out()->get_size(c1, x0, x1, x2), 0.0);
4394 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, x2)]);
4395 std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, x2), 0.0);
4396 for (auto& x5 : *range_[1]) {
4397 for (auto& x4 : *range_[1]) {
4398 for (auto& x3 : *range_[1]) {
4399 // tensor label: Gamma2
4400 std::unique_ptr<double[]> i0data = in(0)->get_block(x5, x4, x0, x3, x1, x2);
4401 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x5, x4, x0, x3, x1, x2)]);
4402 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());
4403 // tensor label: t2
4404 std::unique_ptr<double[]> i1data = in(1)->get_block(x5, x4, c1, x3);
4405 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(x5, x4, c1, x3)]);
4406 sort_indices<0,1,3,2,0,1,1,1>(i1data, i1data_sorted, x5.size(), x4.size(), c1.size(), x3.size());
4407 dgemm_("T", "N", x0.size()*x1.size()*x2.size(), c1.size(), x5.size()*x4.size()*x3.size(),
4408 1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
4409 1.0, odata_sorted, x0.size()*x1.size()*x2.size());
4410 }
4411 }
4412 }
4413 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x0.size(), x1.size(), x2.size(), c1.size());
4414 out()->add_block(odata, c1, x0, x1, x2);
4415 }
4416
compute()4417 void Task46::Task_local::compute() {
4418 const Index c1 = b(0);
4419 const Index x0 = b(1);
4420 const Index x1 = b(2);
4421 const Index c2 = b(3);
4422 // tensor label: I2
4423 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x0, x1, c2)]);
4424 std::fill_n(odata.get(), out()->get_size(c1, x0, x1, c2), 0.0);
4425 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x0, x1, c2)]);
4426 std::fill_n(odata_sorted.get(), out()->get_size(c1, x0, x1, c2), 0.0);
4427 for (auto& x3 : *range_[1]) {
4428 for (auto& x2 : *range_[1]) {
4429 // tensor label: Gamma3
4430 std::unique_ptr<double[]> i0data = in(0)->get_block(x1, x3, x0, x2);
4431 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x1, x3, x0, x2)]);
4432 sort_indices<1,3,0,2,0,1,1,1>(i0data, i0data_sorted, x1.size(), x3.size(), x0.size(), x2.size());
4433 // tensor label: I9
4434 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, c2, x3, x2);
4435 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, c2, x3, x2)]);
4436 sort_indices<2,3,0,1,0,1,1,1>(i1data, i1data_sorted, c1.size(), c2.size(), x3.size(), x2.size());
4437 dgemm_("T", "N", x1.size()*x0.size(), c1.size()*c2.size(), x3.size()*x2.size(),
4438 1.0, i0data_sorted, x3.size()*x2.size(), i1data_sorted, x3.size()*x2.size(),
4439 1.0, odata_sorted, x1.size()*x0.size());
4440 }
4441 }
4442 sort_indices<2,1,0,3,1,1,1,1>(odata_sorted, odata, x1.size(), x0.size(), c1.size(), c2.size());
4443 out()->add_block(odata, c1, x0, x1, c2);
4444 }
4445
compute()4446 void Task47::Task_local::compute() {
4447 const Index c1 = b(0);
4448 const Index c2 = b(1);
4449 const Index x3 = b(2);
4450 const Index x2 = b(3);
4451 // tensor label: I9
4452 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, c2, x3, x2)]);
4453 std::fill_n(odata.get(), out()->get_size(c1, c2, x3, x2), 0.0);
4454 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, c2, x3, x2)]);
4455 std::fill_n(odata_sorted.get(), out()->get_size(c1, c2, x3, x2), 0.0);
4456 for (auto& a3 : *range_[2]) {
4457 // tensor label: f1
4458 std::unique_ptr<double[]> i0data = in(0)->get_block(a3, x2);
4459 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(a3, x2)]);
4460 sort_indices<0,1,0,1,1,1>(i0data, i0data_sorted, a3.size(), x2.size());
4461 // tensor label: t2
4462 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, a3, c2, x3);
4463 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, a3, c2, x3)]);
4464 sort_indices<1,0,2,3,0,1,-1,1>(i1data, i1data_sorted, c1.size(), a3.size(), c2.size(), x3.size());
4465 dgemm_("T", "N", x2.size(), c1.size()*c2.size()*x3.size(), a3.size(),
4466 1.0, i0data_sorted, a3.size(), i1data_sorted, a3.size(),
4467 1.0, odata_sorted, x2.size());
4468 }
4469 sort_indices<1,2,3,0,1,1,1,1>(odata_sorted, odata, x2.size(), c1.size(), c2.size(), x3.size());
4470 out()->add_block(odata, c1, c2, x3, x2);
4471 }
4472
compute()4473 void Task48::Task_local::compute() {
4474 const Index c1 = b(0);
4475 const Index x2 = b(1);
4476 const Index x0 = b(2);
4477 const Index x1 = b(3);
4478 // tensor label: r
4479 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x2, x0, x1)]);
4480 std::fill_n(odata.get(), out()->get_size(c1, x2, x0, x1), 0.0);
4481 {
4482 // tensor label: I11
4483 std::unique_ptr<double[]> i0data = in(0)->get_block(c1, x2, x1, x0);
4484 sort_indices<0,1,3,2,1,1,1,1>(i0data, odata, c1.size(), x2.size(), x1.size(), x0.size());
4485 }
4486 out()->add_block(odata, c1, x2, x0, x1);
4487 }
4488
compute()4489 void Task49::Task_local::compute() {
4490 const Index c1 = b(0);
4491 const Index x2 = b(1);
4492 const Index x1 = b(2);
4493 const Index x0 = b(3);
4494 // tensor label: I11
4495 std::unique_ptr<double[]> odata(new double[out()->get_size(c1, x2, x1, x0)]);
4496 std::fill_n(odata.get(), out()->get_size(c1, x2, x1, x0), 0.0);
4497 std::unique_ptr<double[]> odata_sorted(new double[out()->get_size(c1, x2, x1, x0)]);
4498 std::fill_n(odata_sorted.get(), out()->get_size(c1, x2, x1, x0), 0.0);
4499 for (auto& x5 : *range_[1]) {
4500 for (auto& x3 : *range_[1]) {
4501 for (auto& x4 : *range_[1]) {
4502 // tensor label: Gamma4
4503 std::unique_ptr<double[]> i0data = in(0)->get_block(x2, x5, x3, x4, x1, x0);
4504 std::unique_ptr<double[]> i0data_sorted(new double[in(0)->get_size(x2, x5, x3, x4, x1, x0)]);
4505 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());
4506 // tensor label: I12
4507 std::unique_ptr<double[]> i1data = in(1)->get_block(c1, x5, x4, x3);
4508 std::unique_ptr<double[]> i1data_sorted(new double[in(1)->get_size(c1, x5, x4, x3)]);
4509 sort_indices<1,3,2,0,0,1,1,1>(i1data, i1data_sorted, c1.size(), x5.size(), x4.size(), x3.size());
4510 dgemm_("T", "N", x2.size()*x1.size()*x0.size(), c1.size(), x5.size()*x4.size()*x3.size(),
4511 1.0, i0data_sorted, x5.size()*x4.size()*x3.size(), i1data_sorted, x5.size()*x4.size()*x3.size(),
4512 1.0, odata_sorted, x2.size()*x1.size()*x0.size());
4513 }
4514 }
4515 }
4516 sort_indices<3,0,1,2,1,1,1,1>(odata_sorted, odata, x2.size(), x1.size(), x0.size(), c1.size());
4517 out()->add_block(odata, c1, x2, x1, x0);
4518 }
4519
4520 #endif
4521