1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: MRCI_gen1.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_tasks1.h>
29
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::MRCI;
34
Task0(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)35 Task0::Task0(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
36 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
37 out_ = t[0];
38 in_ = in;
39 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
40 for (auto& x2 : *range[1])
41 for (auto& x1 : *range[1])
42 for (auto& x3 : *range[1])
43 for (auto& x0 : *range[1])
44 if (t[0]->is_local(x0, x3, x1, x2))
45 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x3, x1, x2}}, in, t[0], range));
46 }
47
Task1(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)48 Task1::Task1(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
49 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
50 out_ = t[0];
51 in_ = in;
52 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
53 for (auto& x2 : *range[1])
54 for (auto& x1 : *range[1])
55 for (auto& x3 : *range[1])
56 for (auto& x0 : *range[1])
57 for (auto& x4 : *range[1])
58 for (auto& x5 : *range[1])
59 if (t[0]->is_local(x5, x4, x0, x3, x1, x2))
60 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x0, x3, x1, x2}}, in, t[0], range));
61 }
62
Task2(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)63 Task2::Task2(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
64 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
65 out_ = t[0];
66 in_ = in;
67 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
68 for (auto& x2 : *range[1])
69 for (auto& x0 : *range[1])
70 for (auto& x3 : *range[1])
71 for (auto& x1 : *range[1])
72 if (t[0]->is_local(x1, x3, x0, x2))
73 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x3, x0, x2}}, in, t[0], range));
74 }
75
Task3(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)76 Task3::Task3(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
77 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
78 out_ = t[0];
79 in_ = in;
80 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
81 for (auto& x2 : *range[1])
82 for (auto& x3 : *range[1])
83 for (auto& x4 : *range[1])
84 for (auto& x1 : *range[1])
85 for (auto& x5 : *range[1])
86 for (auto& x0 : *range[1])
87 if (t[0]->is_local(x0, x5, x1, x4, x3, x2))
88 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x0, x5, x1, x4, x3, x2}}, in, t[0], range));
89 }
90
Task4(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)91 Task4::Task4(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
92 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
93 out_ = t[0];
94 in_ = in;
95 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
96 for (auto& x3 : *range[1])
97 for (auto& x1 : *range[1])
98 for (auto& x4 : *range[1])
99 for (auto& x2 : *range[1])
100 for (auto& x5 : *range[1])
101 for (auto& x0 : *range[1])
102 if (t[0]->is_local(x0, x5, x2, x4, x1, x3))
103 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x0, x5, x2, x4, x1, x3}}, in, t[0], range));
104 }
105
Task5(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)106 Task5::Task5(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
107 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
108 out_ = t[0];
109 in_ = in;
110 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
111 for (auto& x2 : *range[1])
112 for (auto& x1 : *range[1])
113 for (auto& x4 : *range[1])
114 for (auto& x3 : *range[1])
115 for (auto& x5 : *range[1])
116 for (auto& x0 : *range[1])
117 if (t[0]->is_local(x0, x5, x3, x4, x1, x2))
118 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x0, x5, x3, x4, x1, x2}}, in, t[0], range));
119 }
120
Task6(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)121 Task6::Task6(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
122 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
123 out_ = t[0];
124 in_ = in;
125 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
126 for (auto& x2 : *range[1])
127 for (auto& x3 : *range[1])
128 for (auto& x4 : *range[1])
129 for (auto& x1 : *range[1])
130 for (auto& x5 : *range[1])
131 for (auto& x0 : *range[1])
132 for (auto& x6 : *range[1])
133 for (auto& x7 : *range[1])
134 if (t[0]->is_local(x7, x6, x0, x5, x1, x4, x3, x2))
135 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x0, x5, x1, x4, x3, x2}}, in, t[0], range));
136 }
137
Task7(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)138 Task7::Task7(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
139 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
140 out_ = t[0];
141 in_ = in;
142 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
143 for (auto& x2 : *range[1])
144 for (auto& x1 : *range[1])
145 for (auto& x3 : *range[1])
146 for (auto& x4 : *range[1])
147 for (auto& x5 : *range[1])
148 for (auto& x0 : *range[1])
149 for (auto& x6 : *range[1])
150 for (auto& x7 : *range[1])
151 if (t[0]->is_local(x7, x6, x0, x5, x4, x3, x1, x2))
152 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x0, x5, x4, x3, x1, x2}}, in, t[0], range));
153 }
154
Task8(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)155 Task8::Task8(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
156 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
157 out_ = t[0];
158 in_ = in;
159 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
160 for (auto& x2 : *range[1])
161 for (auto& x0 : *range[1])
162 for (auto& x3 : *range[1])
163 for (auto& x1 : *range[1])
164 for (auto& x4 : *range[1])
165 for (auto& x5 : *range[1])
166 if (t[0]->is_local(x5, x4, x1, x3, x0, x2))
167 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x1, x3, x0, x2}}, in, t[0], range));
168 }
169
Task9(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)170 Task9::Task9(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
171 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
172 out_ = t[0];
173 in_ = in;
174 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
175 for (auto& x2 : *range[1])
176 for (auto& x3 : *range[1])
177 for (auto& x4 : *range[1])
178 for (auto& x0 : *range[1])
179 for (auto& x5 : *range[1])
180 for (auto& x1 : *range[1])
181 if (t[0]->is_local(x1, x5, x0, x4, x3, x2))
182 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x1, x5, x0, x4, x3, x2}}, in, t[0], range));
183 }
184
Task10(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)185 Task10::Task10(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
186 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
187 out_ = t[0];
188 in_ = in;
189 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
190 for (auto& x2 : *range[1])
191 for (auto& x0 : *range[1])
192 for (auto& x3 : *range[1])
193 for (auto& x4 : *range[1])
194 for (auto& x5 : *range[1])
195 for (auto& x1 : *range[1])
196 if (t[0]->is_local(x1, x5, x4, x3, x0, x2))
197 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x1, x5, x4, x3, x0, x2}}, in, t[0], range));
198 }
199
Task11(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)200 Task11::Task11(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
201 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
202 out_ = t[0];
203 in_ = in;
204 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
205 for (auto& x3 : *range[1])
206 for (auto& x1 : *range[1])
207 for (auto& x4 : *range[1])
208 for (auto& x0 : *range[1])
209 for (auto& x2 : *range[1])
210 for (auto& x5 : *range[1])
211 if (t[0]->is_local(x5, x2, x0, x4, x1, x3))
212 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x2, x0, x4, x1, x3}}, in, t[0], range));
213 }
214
Task12(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)215 Task12::Task12(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
216 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
217 out_ = t[0];
218 in_ = in;
219 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
220 for (auto& x0 : *range[1])
221 for (auto& x1 : *range[1])
222 for (auto& x4 : *range[1])
223 for (auto& x3 : *range[1])
224 for (auto& x5 : *range[1])
225 for (auto& x2 : *range[1])
226 if (t[0]->is_local(x2, x5, x3, x4, x1, x0))
227 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x2, x5, x3, x4, x1, x0}}, in, t[0], range));
228 }
229
Task13(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)230 Task13::Task13(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
231 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
232 out_ = t[0];
233 in_ = in;
234 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
235 for (auto& x0 : *range[1])
236 for (auto& x1 : *range[1])
237 for (auto& x3 : *range[1])
238 for (auto& x2 : *range[1])
239 for (auto& x4 : *range[1])
240 for (auto& x5 : *range[1])
241 if (t[0]->is_local(x5, x4, x2, x3, x1, x0))
242 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x2, x3, x1, x0}}, in, t[0], range));
243 }
244
Task14(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)245 Task14::Task14(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
246 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
247 out_ = t[0];
248 in_ = in;
249 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
250 for (auto& x0 : *range[1])
251 for (auto& x1 : *range[1])
252 for (auto& x3 : *range[1])
253 for (auto& x2 : *range[1])
254 if (t[0]->is_local(x2, x3, x1, x0))
255 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x2, x3, x1, x0}}, in, t[0], range));
256 }
257
Task15(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)258 Task15::Task15(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
259 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
260 out_ = t[0];
261 in_ = in;
262 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
263 for (auto& x0 : *range[1])
264 for (auto& x1 : *range[1])
265 for (auto& x4 : *range[1])
266 for (auto& x2 : *range[1])
267 for (auto& x3 : *range[1])
268 for (auto& x5 : *range[1])
269 if (t[0]->is_local(x5, x3, x2, x4, x1, x0))
270 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x3, x2, x4, x1, x0}}, in, t[0], range));
271 }
272
Task16(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)273 Task16::Task16(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
274 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
275 out_ = t[0];
276 in_ = in;
277 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
278 for (auto& x0 : *range[1])
279 for (auto& x1 : *range[1])
280 for (auto& x3 : *range[1])
281 for (auto& x4 : *range[1])
282 for (auto& x6 : *range[1])
283 for (auto& x5 : *range[1])
284 for (auto& x7 : *range[1])
285 for (auto& x2 : *range[1])
286 if (t[0]->is_local(x2, x7, x5, x6, x4, x3, x1, x0))
287 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x2, x7, x5, x6, x4, x3, x1, x0}}, in, t[0], range));
288 }
289
Task17(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)290 Task17::Task17(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
291 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
292 out_ = t[0];
293 in_ = in;
294 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
295 for (auto& x0 : *range[1])
296 for (auto& x1 : *range[1])
297 for (auto& x4 : *range[1])
298 for (auto& x5 : *range[1])
299 for (auto& x6 : *range[1])
300 for (auto& x3 : *range[1])
301 for (auto& x7 : *range[1])
302 for (auto& x2 : *range[1])
303 if (t[0]->is_local(x2, x7, x3, x6, x5, x4, x1, x0))
304 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x2, x7, x3, x6, x5, x4, x1, x0}}, in, t[0], range));
305 }
306
Task18(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)307 Task18::Task18(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
308 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
309 out_ = t[0];
310 in_ = in;
311 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
312 for (auto& x0 : *range[1])
313 for (auto& x1 : *range[1])
314 for (auto& x3 : *range[1])
315 for (auto& x4 : *range[1])
316 for (auto& x5 : *range[1])
317 for (auto& x2 : *range[1])
318 for (auto& x6 : *range[1])
319 for (auto& x7 : *range[1])
320 if (t[0]->is_local(x7, x6, x2, x5, x4, x3, x1, x0))
321 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x2, x5, x4, x3, x1, x0}}, in, t[0], range));
322 }
323
Task19(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)324 Task19::Task19(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
325 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
326 out_ = t[0];
327 in_ = in;
328 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
329 for (auto& x0 : *range[1])
330 for (auto& x1 : *range[1])
331 for (auto& x4 : *range[1])
332 for (auto& x2 : *range[1])
333 for (auto& x5 : *range[1])
334 for (auto& x3 : *range[1])
335 for (auto& x6 : *range[1])
336 for (auto& x7 : *range[1])
337 if (t[0]->is_local(x7, x6, x3, x5, x2, x4, x1, x0))
338 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x3, x5, x2, x4, x1, x0}}, in, t[0], range));
339 }
340
Task20(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)341 Task20::Task20(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
342 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
343 out_ = t[0];
344 in_ = in;
345 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
346 for (auto& x0 : *range[1])
347 for (auto& x1 : *range[1])
348 for (auto& x3 : *range[1])
349 for (auto& x2 : *range[1])
350 for (auto& x5 : *range[1])
351 for (auto& x4 : *range[1])
352 for (auto& x6 : *range[1])
353 for (auto& x7 : *range[1])
354 if (t[0]->is_local(x7, x6, x4, x5, x2, x3, x1, x0))
355 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x4, x5, x2, x3, x1, x0}}, in, t[0], range));
356 }
357
Task21(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)358 Task21::Task21(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
359 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
360 out_ = t[0];
361 in_ = in;
362 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
363 for (auto& x0 : *range[1])
364 for (auto& x1 : *range[1])
365 for (auto& x3 : *range[1])
366 for (auto& x4 : *range[1])
367 for (auto& x5 : *range[1])
368 for (auto& x2 : *range[1])
369 if (t[0]->is_local(x2, x5, x4, x3, x1, x0))
370 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x2, x5, x4, x3, x1, x0}}, in, t[0], range));
371 }
372
Task22(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)373 Task22::Task22(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
374 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
375 out_ = t[0];
376 in_ = in;
377 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
378 for (auto& x0 : *range[1])
379 for (auto& x1 : *range[1])
380 for (auto& x4 : *range[1])
381 for (auto& x2 : *range[1])
382 for (auto& x5 : *range[1])
383 for (auto& x3 : *range[1])
384 if (t[0]->is_local(x3, x5, x2, x4, x1, x0))
385 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x3, x5, x2, x4, x1, x0}}, in, t[0], range));
386 }
387
Task23(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)388 Task23::Task23(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
389 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
390 out_ = t[0];
391 in_ = in;
392 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
393 for (auto& x0 : *range[1])
394 for (auto& x1 : *range[1])
395 for (auto& x3 : *range[1])
396 for (auto& x2 : *range[1])
397 for (auto& x5 : *range[1])
398 for (auto& x4 : *range[1])
399 if (t[0]->is_local(x4, x5, x2, x3, x1, x0))
400 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x4, x5, x2, x3, x1, x0}}, in, t[0], range));
401 }
402
Task24(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)403 Task24::Task24(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
404 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
405 out_ = t[0];
406 in_ = in;
407 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
408 for (auto& x0 : *range[1])
409 for (auto& x1 : *range[1])
410 for (auto& x3 : *range[1])
411 for (auto& x4 : *range[1])
412 for (auto& x6 : *range[1])
413 for (auto& x2 : *range[1])
414 for (auto& x5 : *range[1])
415 for (auto& x7 : *range[1])
416 if (t[0]->is_local(x7, x5, x2, x6, x4, x3, x1, x0))
417 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x5, x2, x6, x4, x3, x1, x0}}, in, t[0], range));
418 }
419
Task25(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)420 Task25::Task25(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
421 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
422 out_ = t[0];
423 in_ = in;
424 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
425 for (auto& x0 : *range[1])
426 for (auto& x1 : *range[1])
427 for (auto& x4 : *range[1])
428 for (auto& x5 : *range[1])
429 for (auto& x6 : *range[1])
430 for (auto& x2 : *range[1])
431 for (auto& x3 : *range[1])
432 for (auto& x7 : *range[1])
433 if (t[0]->is_local(x7, x3, x2, x6, x5, x4, x1, x0))
434 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x3, x2, x6, x5, x4, x1, x0}}, in, t[0], range));
435 }
436
Task26(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)437 Task26::Task26(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
438 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
439 out_ = t[0];
440 in_ = in;
441 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
442 for (auto& x0 : *range[1])
443 for (auto& x1 : *range[1])
444 for (auto& x3 : *range[1])
445 for (auto& x2 : *range[1])
446 for (auto& x4 : *range[1])
447 for (auto& x5 : *range[1])
448 for (auto& x6 : *range[1])
449 for (auto& x7 : *range[1])
450 if (t[0]->is_local(x7, x6, x5, x4, x2, x3, x1, x0))
451 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x5, x4, x2, x3, x1, x0}}, in, t[0], range));
452 }
453
Task27(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)454 Task27::Task27(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
455 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
456 out_ = t[0];
457 in_ = in;
458 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
459 for (auto& x0 : *range[1])
460 for (auto& x1 : *range[1])
461 for (auto& x4 : *range[1])
462 for (auto& x2 : *range[1])
463 for (auto& x5 : *range[1])
464 for (auto& x6 : *range[1])
465 for (auto& x3 : *range[1])
466 for (auto& x7 : *range[1])
467 if (t[0]->is_local(x7, x3, x6, x5, x2, x4, x1, x0))
468 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x3, x6, x5, x2, x4, x1, x0}}, in, t[0], range));
469 }
470
Task28(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)471 Task28::Task28(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
472 array<shared_ptr<const Tensor>,5> in = {{t[1], t[2], t[3], t[4], t[5]}};
473 out_ = t[0];
474 in_ = in;
475 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
476 for (auto& x0 : *range[1])
477 for (auto& x1 : *range[1])
478 for (auto& x5 : *range[1])
479 for (auto& x2 : *range[1])
480 for (auto& x6 : *range[1])
481 for (auto& x7 : *range[1])
482 for (auto& x3 : *range[1])
483 for (auto& x4 : *range[1])
484 if (t[0]->is_local(x7, x6, x2, x5, x1, x0))
485 subtasks_.push_back(make_shared<Task_local>(array<const Index,8>{{x7, x6, x2, x5, x1, x0, x4, x3}}, in, t[0], range));
486 }
487
Task29(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)488 Task29::Task29(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
489 array<shared_ptr<const Tensor>,5> in = {{t[1], t[2], t[3], t[4], t[5]}};
490 out_ = t[0];
491 in_ = in;
492 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
493 for (auto& x0 : *range[1])
494 for (auto& x1 : *range[1])
495 for (auto& x7 : *range[1])
496 for (auto& x2 : *range[1])
497 for (auto& x8 : *range[1])
498 for (auto& x9 : *range[1])
499 for (auto& x3 : *range[1])
500 for (auto& x4 : *range[1])
501 for (auto& x5 : *range[1])
502 for (auto& x6 : *range[1])
503 if (t[0]->is_local(x9, x8, x2, x7, x1, x0))
504 subtasks_.push_back(make_shared<Task_local>(array<const Index,10>{{x9, x8, x2, x7, x1, x0, x6, x5, x4, x3}}, in, t[0], range));
505 }
506
Task30(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)507 Task30::Task30(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
508 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
509 out_ = t[0];
510 in_ = in;
511 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
512 for (auto& x1 : *range[1])
513 for (auto& x0 : *range[1])
514 for (auto& x2 : *range[1])
515 for (auto& x3 : *range[1])
516 if (t[0]->is_local(x3, x2, x0, x1))
517 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, x2, x0, x1}}, in, t[0], range));
518 }
519
Task31(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)520 Task31::Task31(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
521 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
522 out_ = t[0];
523 in_ = in;
524 subtasks_.reserve(range[1]->nblock()*range[1]->nblock());
525 for (auto& x1 : *range[1])
526 for (auto& x0 : *range[1])
527 if (t[0]->is_local(x0, x1))
528 subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{x0, x1}}, in, t[0], range));
529 }
530
Task32(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)531 Task32::Task32(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
532 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
533 out_ = t[0];
534 in_ = in;
535 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
536 for (auto& x2 : *range[1])
537 for (auto& x0 : *range[1])
538 for (auto& x1 : *range[1])
539 for (auto& x3 : *range[1])
540 if (t[0]->is_local(x3, x1, x0, x2))
541 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, x1, x0, x2}}, in, t[0], range));
542 }
543
Task33(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)544 Task33::Task33(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
545 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
546 out_ = t[0];
547 in_ = in;
548 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
549 for (auto& x1 : *range[1])
550 for (auto& x2 : *range[1])
551 for (auto& x3 : *range[1])
552 for (auto& x0 : *range[1])
553 if (t[0]->is_local(x0, x3, x2, x1))
554 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x3, x2, x1}}, in, t[0], range));
555 }
556
Task34(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)557 Task34::Task34(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
558 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
559 out_ = t[0];
560 in_ = in;
561 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
562 for (auto& x1 : *range[1])
563 for (auto& x2 : *range[1])
564 for (auto& x4 : *range[1])
565 for (auto& x0 : *range[1])
566 for (auto& x5 : *range[1])
567 for (auto& x3 : *range[1])
568 if (t[0]->is_local(x3, x5, x0, x4, x2, x1))
569 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x3, x5, x0, x4, x2, x1}}, in, t[0], range));
570 }
571
Task35(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)572 Task35::Task35(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
573 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
574 out_ = t[0];
575 in_ = in;
576 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
577 for (auto& x1 : *range[1])
578 for (auto& x2 : *range[1])
579 for (auto& x3 : *range[1])
580 for (auto& x0 : *range[1])
581 for (auto& x4 : *range[1])
582 for (auto& x5 : *range[1])
583 if (t[0]->is_local(x5, x4, x0, x3, x2, x1))
584 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x0, x3, x2, x1}}, in, t[0], range));
585 }
586
Task36(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)587 Task36::Task36(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
588 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
589 out_ = t[0];
590 in_ = in;
591 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
592 for (auto& x1 : *range[1])
593 for (auto& x0 : *range[1])
594 for (auto& x3 : *range[1])
595 for (auto& x2 : *range[1])
596 for (auto& x4 : *range[1])
597 for (auto& x5 : *range[1])
598 if (t[0]->is_local(x5, x4, x2, x3, x0, x1))
599 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x2, x3, x0, x1}}, in, t[0], range));
600 }
601
Task37(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)602 Task37::Task37(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
603 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
604 out_ = t[0];
605 in_ = in;
606 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
607 for (auto& x1 : *range[1])
608 for (auto& x0 : *range[1])
609 for (auto& x3 : *range[1])
610 for (auto& x2 : *range[1])
611 if (t[0]->is_local(x2, x3, x0, x1))
612 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x2, x3, x0, x1}}, in, t[0], range));
613 }
614
Task38(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)615 Task38::Task38(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
616 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
617 out_ = t[0];
618 in_ = in;
619 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
620 for (auto& x1 : *range[1])
621 for (auto& x2 : *range[1])
622 for (auto& x4 : *range[1])
623 for (auto& x0 : *range[1])
624 for (auto& x3 : *range[1])
625 for (auto& x5 : *range[1])
626 if (t[0]->is_local(x5, x3, x0, x4, x2, x1))
627 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x3, x0, x4, x2, x1}}, in, t[0], range));
628 }
629
Task39(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)630 Task39::Task39(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
631 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
632 out_ = t[0];
633 in_ = in;
634 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
635 for (auto& x2 : *range[1])
636 for (auto& x3 : *range[1])
637 for (auto& x4 : *range[1])
638 for (auto& x0 : *range[1])
639 for (auto& x1 : *range[1])
640 for (auto& x5 : *range[1])
641 if (t[0]->is_local(x5, x1, x0, x4, x3, x2))
642 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x1, x0, x4, x3, x2}}, in, t[0], range));
643 }
644
Task40(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)645 Task40::Task40(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
646 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
647 out_ = t[0];
648 in_ = in;
649 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
650 for (auto& x1 : *range[1])
651 for (auto& x0 : *range[1])
652 for (auto& x2 : *range[1])
653 for (auto& x3 : *range[1])
654 for (auto& x4 : *range[1])
655 for (auto& x5 : *range[1])
656 if (t[0]->is_local(x5, x4, x3, x2, x0, x1))
657 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x3, x2, x0, x1}}, in, t[0], range));
658 }
659
Task41(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)660 Task41::Task41(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
661 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
662 out_ = t[0];
663 in_ = in;
664 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
665 for (auto& x1 : *range[1])
666 for (auto& x0 : *range[1])
667 for (auto& x3 : *range[1])
668 for (auto& x4 : *range[1])
669 for (auto& x2 : *range[1])
670 for (auto& x5 : *range[1])
671 if (t[0]->is_local(x5, x2, x4, x3, x0, x1))
672 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x2, x4, x3, x0, x1}}, in, t[0], range));
673 }
674
Task42(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)675 Task42::Task42(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
676 array<shared_ptr<const Tensor>,4> in = {{t[1], t[2], t[3], t[4]}};
677 out_ = t[0];
678 in_ = in;
679 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
680 for (auto& x3 : *range[1])
681 for (auto& x0 : *range[1])
682 for (auto& x1 : *range[1])
683 for (auto& x2 : *range[1])
684 if (t[0]->is_local(x0, x3))
685 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x3, x2, x1}}, in, t[0], range));
686 }
687
Task43(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)688 Task43::Task43(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
689 array<shared_ptr<const Tensor>,5> in = {{t[1], t[2], t[3], t[4], t[5]}};
690 out_ = t[0];
691 in_ = in;
692 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
693 for (auto& x5 : *range[1])
694 for (auto& x0 : *range[1])
695 for (auto& x1 : *range[1])
696 for (auto& x2 : *range[1])
697 for (auto& x3 : *range[1])
698 for (auto& x4 : *range[1])
699 if (t[0]->is_local(x0, x5))
700 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x0, x5, x4, x3, x2, x1}}, in, t[0], range));
701 }
702
Task44(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)703 Task44::Task44(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
704 array<shared_ptr<const Tensor>,3> in = {{t[1], t[2], t[3]}};
705 out_ = t[0];
706 in_ = in;
707 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
708 for (auto& x0 : *range[1])
709 for (auto& x2 : *range[1])
710 for (auto& x3 : *range[1])
711 for (auto& x1 : *range[1])
712 for (auto& x4 : *range[1])
713 for (auto& x5 : *range[1])
714 if (t[0]->is_local(x5, x4, x1, x3, x2, x0))
715 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x1, x3, x2, x0}}, in, t[0], range));
716 }
717
Task45(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)718 Task45::Task45(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
719 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
720 out_ = t[0];
721 in_ = in;
722 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
723 for (auto& x0 : *range[1])
724 for (auto& x2 : *range[1])
725 for (auto& x3 : *range[1])
726 for (auto& x1 : *range[1])
727 if (t[0]->is_local(x1, x3, x2, x0))
728 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x3, x2, x0}}, in, t[0], range));
729 }
730
Task46(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)731 Task46::Task46(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
732 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
733 out_ = t[0];
734 in_ = in;
735 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
736 for (auto& x2 : *range[1])
737 for (auto& x1 : *range[1])
738 for (auto& x0 : *range[1])
739 for (auto& x3 : *range[1])
740 if (t[0]->is_local(x3, x0, x1, x2))
741 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, x0, x1, x2}}, in, t[0], range));
742 }
743
Task47(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)744 Task47::Task47(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
745 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
746 out_ = t[0];
747 in_ = in;
748 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
749 for (auto& x0 : *range[1])
750 for (auto& x1 : *range[1])
751 for (auto& x2 : *range[1])
752 for (auto& x3 : *range[1])
753 if (t[0]->is_local(x3, x2, x1, x0))
754 subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, x2, x1, x0}}, in, t[0], range));
755 }
756
Task48(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)757 Task48::Task48(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
758 array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
759 out_ = t[0];
760 in_ = in;
761 subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
762 for (auto& x2 : *range[1])
763 for (auto& x1 : *range[1])
764 for (auto& x3 : *range[1])
765 for (auto& x4 : *range[1])
766 for (auto& x0 : *range[1])
767 for (auto& x5 : *range[1])
768 if (t[0]->is_local(x5, x0, x4, x3, x1, x2))
769 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x0, x4, x3, x1, x2}}, in, t[0], range));
770 }
771
Task49(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)772 Task49::Task49(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
773 array<shared_ptr<const Tensor>,1> in = {{t[1]}};
774 out_ = t[0];
775 in_ = in;
776 subtasks_.reserve(range[1]->nblock()*range[1]->nblock());
777 for (auto& x0 : *range[1])
778 for (auto& x1 : *range[1])
779 if (t[0]->is_local(x1, x0))
780 subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{x1, x0}}, in, t[0], range));
781 }
782
783 #endif
784