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