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