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