1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: RelMRCI_tasks4.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_tasks4.h>
29 
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::RelMRCI;
34 
Task150(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)35 Task150::Task150(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[0]->nblock()*range[1]->nblock()*range[1]->nblock());
40   for (auto& x5 : *range[1])
41     for (auto& c1 : *range[0])
42       for (auto& x3 : *range[1])
43         for (auto& x4 : *range[1])
44           if (t[0]->is_local(x4, x3, c1, x5))
45             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x4, x3, c1, x5}}, in, t[0], range));
46 }
47 
Task151(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)48 Task151::Task151(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
49   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
50   out_ = t[0];
51   in_ = in;
52   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
53   for (auto& x0 : *range[1])
54     for (auto& x1 : *range[1])
55       for (auto& x2 : *range[1])
56         for (auto& c1 : *range[0])
57           if (t[0]->is_local(c1, x2, x1, x0))
58             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x1, x0}}, in, t[0], range));
59 }
60 
Task152(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)61 Task152::Task152(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
62   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
63   out_ = t[0];
64   in_ = in;
65   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[0]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
66   for (auto& x6 : *range[1])
67     for (auto& x7 : *range[1])
68       for (auto& c1 : *range[0])
69         for (auto& x3 : *range[1])
70           for (auto& x4 : *range[1])
71             for (auto& x5 : *range[1])
72               if (t[0]->is_local(x5, x4, x3, c1, x7, x6))
73                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{x5, x4, x3, c1, x7, x6}}, in, t[0], range));
74 }
75 
Task153(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)76 Task153::Task153(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
77   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
78   out_ = t[0];
79   in_ = in;
80   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
81   for (auto& x0 : *range[1])
82     for (auto& x1 : *range[1])
83       for (auto& x2 : *range[1])
84         for (auto& c1 : *range[0])
85           if (t[0]->is_local(c1, x2, x1, x0))
86             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x1, x0}}, in, t[0], range));
87 }
88 
Task154(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)89 Task154::Task154(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
90   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
91   out_ = t[0];
92   in_ = in;
93   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
94   for (auto& x5 : *range[1])
95     for (auto& x6 : *range[1])
96       for (auto& x7 : *range[1])
97         for (auto& x3 : *range[1])
98           for (auto& x4 : *range[1])
99             for (auto& c1 : *range[0])
100               if (t[0]->is_local(c1, x4, x3, x7, x6, x5))
101                 subtasks_.push_back(make_shared<Task_local>(array<const Index,6>{{c1, x4, x3, x7, x6, x5}}, in, t[0], range));
102 }
103 
Task155(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)104 Task155::Task155(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
105   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
106   out_ = t[0];
107   in_ = in;
108   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
109   for (auto& x0 : *range[1])
110     for (auto& x1 : *range[1])
111       for (auto& x2 : *range[1])
112         for (auto& c1 : *range[0])
113           if (t[0]->is_local(c1, x2, x1, x0))
114             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x1, x0}}, in, t[0], range));
115 }
116 
Task156(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)117 Task156::Task156(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
118   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
119   out_ = t[0];
120   in_ = in;
121   subtasks_.reserve(range[0]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
122   for (auto& c1 : *range[0])
123     for (auto& x5 : *range[1])
124       for (auto& x3 : *range[1])
125         for (auto& x4 : *range[1])
126           if (t[0]->is_local(x4, x3, x5, c1))
127             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x4, x3, x5, c1}}, in, t[0], range));
128 }
129 
Task157(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)130 Task157::Task157(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
131   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
132   out_ = t[0];
133   in_ = in;
134   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
135   for (auto& x0 : *range[1])
136     for (auto& x1 : *range[1])
137       for (auto& x2 : *range[1])
138         for (auto& c1 : *range[0])
139           if (t[0]->is_local(c1, x2, x1, x0))
140             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x1, x0}}, in, t[0], range));
141 }
142 
Task158(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)143 Task158::Task158(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
144   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
145   out_ = t[0];
146   in_ = in;
147   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
148   for (auto& x0 : *range[1])
149     for (auto& x1 : *range[1])
150       for (auto& x2 : *range[1])
151         for (auto& c1 : *range[0])
152           if (t[0]->is_local(c1, x2, x1, x0))
153             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x1, x0}}, in, t[0], range));
154 }
155 
Task159(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)156 Task159::Task159(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
157   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
158   out_ = t[0];
159   in_ = in;
160   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[1]->nblock()*range[0]->nblock());
161   for (auto& a2 : *range[2])
162     for (auto& c1 : *range[0])
163       for (auto& x0 : *range[1])
164         for (auto& c3 : *range[0])
165           if (t[0]->is_local(c3, x0, c1, a2))
166             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, x0, c1, a2}}, in, t[0], range));
167 }
168 
Task160(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)169 Task160::Task160(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
170   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
171   out_ = t[0];
172   in_ = in;
173   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[0]->nblock()*range[0]->nblock());
174   for (auto& a2 : *range[2])
175     for (auto& x0 : *range[1])
176       for (auto& c3 : *range[0])
177         for (auto& c1 : *range[0])
178           if (t[0]->is_local(c1, c3, x0, a2))
179             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c3, x0, a2}}, in, t[0], range));
180 }
181 
Task161(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)182 Task161::Task161(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
183   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
184   out_ = t[0];
185   in_ = in;
186   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[0]->nblock()*range[0]->nblock());
187   for (auto& x0 : *range[1])
188     for (auto& x1 : *range[1])
189       for (auto& c3 : *range[0])
190         for (auto& c1 : *range[0])
191           if (t[0]->is_local(c1, c3, x1, x0))
192             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c3, x1, x0}}, in, t[0], range));
193 }
194 
Task162(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)195 Task162::Task162(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[2]->nblock()*range[1]->nblock()*range[0]->nblock()*range[0]->nblock());
200   for (auto& a2 : *range[2])
201     for (auto& x0 : *range[1])
202       for (auto& c3 : *range[0])
203         for (auto& c1 : *range[0])
204           if (t[0]->is_local(c1, c3, x0, a2))
205             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c3, x0, a2}}, in, t[0], range));
206 }
207 
Task163(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)208 Task163::Task163(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
209   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
210   out_ = t[0];
211   in_ = in;
212   subtasks_.reserve(range[1]->nblock()*range[0]->nblock());
213   for (auto& x0 : *range[1])
214     for (auto& c3 : *range[0])
215       if (t[0]->is_local(c3, x0))
216         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{c3, x0}}, in, t[0], range));
217 }
218 
Task164(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)219 Task164::Task164(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
220   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
221   out_ = t[0];
222   in_ = in;
223   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[0]->nblock()*range[0]->nblock());
224   for (auto& a2 : *range[2])
225     for (auto& x0 : *range[1])
226       for (auto& c3 : *range[0])
227         for (auto& c1 : *range[0])
228           if (t[0]->is_local(c1, c3, x0, a2))
229             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c3, x0, a2}}, in, t[0], range));
230 }
231 
Task165(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)232 Task165::Task165(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
233   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
234   out_ = t[0];
235   in_ = in;
236   subtasks_.reserve(range[1]->nblock()*range[0]->nblock());
237   for (auto& x0 : *range[1])
238     for (auto& c1 : *range[0])
239       if (t[0]->is_local(c1, x0))
240         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{c1, x0}}, in, t[0], range));
241 }
242 
Task166(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)243 Task166::Task166(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
244   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
245   out_ = t[0];
246   in_ = in;
247   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[0]->nblock()*range[0]->nblock());
248   for (auto& a2 : *range[2])
249     for (auto& x0 : *range[1])
250       for (auto& c3 : *range[0])
251         for (auto& c1 : *range[0])
252           if (t[0]->is_local(c1, c3, x0, a2))
253             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c3, x0, a2}}, in, t[0], range));
254 }
255 
Task167(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)256 Task167::Task167(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
257   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
258   out_ = t[0];
259   in_ = in;
260   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
261   for (auto& x1 : *range[1])
262     for (auto& c3 : *range[0])
263       for (auto& a2 : *range[2])
264         for (auto& c1 : *range[0])
265           if (t[0]->is_local(c1, a2, c3, x1))
266             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
267 }
268 
Task168(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)269 Task168::Task168(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
270   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
271   out_ = t[0];
272   in_ = in;
273   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
274   for (auto& x1 : *range[1])
275     for (auto& c3 : *range[0])
276       for (auto& a2 : *range[2])
277         for (auto& c1 : *range[0])
278           if (t[0]->is_local(c1, a2, c3, x1))
279             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
280 }
281 
Task169(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)282 Task169::Task169(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
283   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
284   out_ = t[0];
285   in_ = in;
286   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
287   for (auto& x1 : *range[1])
288     for (auto& c3 : *range[0])
289       for (auto& a2 : *range[2])
290         for (auto& c1 : *range[0])
291           if (t[0]->is_local(c1, a2, c3, x1))
292             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
293 }
294 
Task170(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)295 Task170::Task170(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
296   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
297   out_ = t[0];
298   in_ = in;
299   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
300   for (auto& x1 : *range[1])
301     for (auto& c3 : *range[0])
302       for (auto& a2 : *range[2])
303         for (auto& c1 : *range[0])
304           if (t[0]->is_local(c1, a2, c3, x1))
305             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
306 }
307 
Task171(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)308 Task171::Task171(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
309   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
310   out_ = t[0];
311   in_ = in;
312   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
313   for (auto& x1 : *range[1])
314     for (auto& c3 : *range[0])
315       for (auto& a2 : *range[2])
316         for (auto& c1 : *range[0])
317           if (t[0]->is_local(c1, a2, c3, x1))
318             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
319 }
320 
Task172(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)321 Task172::Task172(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[0]->nblock()*range[2]->nblock()*range[0]->nblock());
326   for (auto& x1 : *range[1])
327     for (auto& c3 : *range[0])
328       for (auto& a2 : *range[2])
329         for (auto& c1 : *range[0])
330           if (t[0]->is_local(c1, a2, c3, x1))
331             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
332 }
333 
Task173(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)334 Task173::Task173(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
335   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
336   out_ = t[0];
337   in_ = in;
338   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
339   for (auto& x1 : *range[1])
340     for (auto& c3 : *range[0])
341       for (auto& a2 : *range[2])
342         for (auto& c1 : *range[0])
343           if (t[0]->is_local(c1, a2, c3, x1))
344             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
345 }
346 
Task174(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)347 Task174::Task174(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
348   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
349   out_ = t[0];
350   in_ = in;
351   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
352   for (auto& x1 : *range[1])
353     for (auto& c3 : *range[0])
354       for (auto& a2 : *range[2])
355         for (auto& c1 : *range[0])
356           if (t[0]->is_local(c1, a2, c3, x1))
357             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
358 }
359 
Task175(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)360 Task175::Task175(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
361   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
362   out_ = t[0];
363   in_ = in;
364   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
365   for (auto& x1 : *range[1])
366     for (auto& c3 : *range[0])
367       for (auto& a2 : *range[2])
368         for (auto& c1 : *range[0])
369           if (t[0]->is_local(c1, a2, c3, x1))
370             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
371 }
372 
Task176(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)373 Task176::Task176(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
374   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
375   out_ = t[0];
376   in_ = in;
377   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
378   for (auto& x1 : *range[1])
379     for (auto& c3 : *range[0])
380       for (auto& a2 : *range[2])
381         for (auto& c1 : *range[0])
382           if (t[0]->is_local(c1, a2, c3, x1))
383             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
384 }
385 
Task177(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)386 Task177::Task177(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
387   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
388   out_ = t[0];
389   in_ = in;
390   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
391   for (auto& x1 : *range[1])
392     for (auto& c3 : *range[0])
393       for (auto& a2 : *range[2])
394         for (auto& c1 : *range[0])
395           if (t[0]->is_local(c1, a2, c3, x1))
396             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
397 }
398 
Task178(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)399 Task178::Task178(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
400   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
401   out_ = t[0];
402   in_ = in;
403   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
404   for (auto& x1 : *range[1])
405     for (auto& c3 : *range[0])
406       for (auto& a2 : *range[2])
407         for (auto& c1 : *range[0])
408           if (t[0]->is_local(c1, a2, c3, x1))
409             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
410 }
411 
Task179(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)412 Task179::Task179(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
413   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
414   out_ = t[0];
415   in_ = in;
416   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
417   for (auto& x1 : *range[1])
418     for (auto& c3 : *range[0])
419       for (auto& a2 : *range[2])
420         for (auto& c1 : *range[0])
421           if (t[0]->is_local(c1, a2, c3, x1))
422             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
423 }
424 
Task180(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)425 Task180::Task180(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
426   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
427   out_ = t[0];
428   in_ = in;
429   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
430   for (auto& x1 : *range[1])
431     for (auto& c3 : *range[0])
432       for (auto& a2 : *range[2])
433         for (auto& c1 : *range[0])
434           if (t[0]->is_local(c1, a2, c3, x1))
435             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
436 }
437 
Task181(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)438 Task181::Task181(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
439   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
440   out_ = t[0];
441   in_ = in;
442   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
443   for (auto& x1 : *range[1])
444     for (auto& c3 : *range[0])
445       for (auto& a2 : *range[2])
446         for (auto& c1 : *range[0])
447           if (t[0]->is_local(c1, a2, c3, x1))
448             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
449 }
450 
Task182(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)451 Task182::Task182(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
452   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
453   out_ = t[0];
454   in_ = in;
455   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
456   for (auto& x1 : *range[1])
457     for (auto& c3 : *range[0])
458       for (auto& a2 : *range[2])
459         for (auto& c1 : *range[0])
460           if (t[0]->is_local(c1, a2, c3, x1))
461             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
462 }
463 
Task183(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)464 Task183::Task183(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
465   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
466   out_ = t[0];
467   in_ = in;
468   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
469   for (auto& x1 : *range[1])
470     for (auto& c3 : *range[0])
471       for (auto& a2 : *range[2])
472         for (auto& c1 : *range[0])
473           if (t[0]->is_local(c1, a2, c3, x1))
474             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
475 }
476 
Task184(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)477 Task184::Task184(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
478   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
479   out_ = t[0];
480   in_ = in;
481   subtasks_.reserve(range[0]->nblock()*range[0]->nblock()*range[1]->nblock()*range[2]->nblock());
482   for (auto& c4 : *range[0])
483     for (auto& c1 : *range[0])
484       for (auto& x1 : *range[1])
485         for (auto& a5 : *range[2])
486           if (t[0]->is_local(a5, x1, c1, c4))
487             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a5, x1, c1, c4}}, in, t[0], range));
488 }
489 
Task185(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)490 Task185::Task185(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
491   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
492   out_ = t[0];
493   in_ = in;
494   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
495   for (auto& x1 : *range[1])
496     for (auto& c3 : *range[0])
497       for (auto& a2 : *range[2])
498         for (auto& c1 : *range[0])
499           if (t[0]->is_local(c1, a2, c3, x1))
500             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
501 }
502 
Task186(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)503 Task186::Task186(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
504   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
505   out_ = t[0];
506   in_ = in;
507   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
508   for (auto& x1 : *range[1])
509     for (auto& c3 : *range[0])
510       for (auto& a2 : *range[2])
511         for (auto& c1 : *range[0])
512           if (t[0]->is_local(c1, a2, c3, x1))
513             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
514 }
515 
Task187(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)516 Task187::Task187(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
517   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
518   out_ = t[0];
519   in_ = in;
520   subtasks_.reserve(range[0]->nblock()*range[0]->nblock()*range[1]->nblock()*range[2]->nblock());
521   for (auto& c4 : *range[0])
522     for (auto& c3 : *range[0])
523       for (auto& x1 : *range[1])
524         for (auto& a5 : *range[2])
525           if (t[0]->is_local(a5, x1, c3, c4))
526             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a5, x1, c3, c4}}, in, t[0], range));
527 }
528 
Task188(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)529 Task188::Task188(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
530   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
531   out_ = t[0];
532   in_ = in;
533   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
534   for (auto& x1 : *range[1])
535     for (auto& c3 : *range[0])
536       for (auto& a2 : *range[2])
537         for (auto& c1 : *range[0])
538           if (t[0]->is_local(c1, a2, c3, x1))
539             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
540 }
541 
Task189(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)542 Task189::Task189(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[0]->nblock()*range[0]->nblock()*range[1]->nblock()*range[2]->nblock());
547   for (auto& c4 : *range[0])
548     for (auto& c3 : *range[0])
549       for (auto& x1 : *range[1])
550         for (auto& a5 : *range[2])
551           if (t[0]->is_local(a5, x1, c3, c4))
552             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a5, x1, c3, c4}}, in, t[0], range));
553 }
554 
Task190(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)555 Task190::Task190(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[0]->nblock()*range[2]->nblock()*range[0]->nblock());
560   for (auto& x1 : *range[1])
561     for (auto& c3 : *range[0])
562       for (auto& a2 : *range[2])
563         for (auto& c1 : *range[0])
564           if (t[0]->is_local(c1, a2, c3, x1))
565             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
566 }
567 
Task191(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)568 Task191::Task191(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[0]->nblock()*range[2]->nblock()*range[0]->nblock());
573   for (auto& x1 : *range[1])
574     for (auto& c3 : *range[0])
575       for (auto& a2 : *range[2])
576         for (auto& c1 : *range[0])
577           if (t[0]->is_local(c1, a2, c3, x1))
578             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, c3, x1}}, in, t[0], range));
579 }
580 
Task192(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)581 Task192::Task192(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[2]->nblock()*range[1]->nblock()*range[0]->nblock()*range[0]->nblock());
586   for (auto& a2 : *range[2])
587     for (auto& x0 : *range[1])
588       for (auto& c3 : *range[0])
589         for (auto& c1 : *range[0])
590           if (t[0]->is_local(c1, c3, x0, a2))
591             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c3, x0, a2}}, in, t[0], range));
592 }
593 
Task193(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)594 Task193::Task193(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
595   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
596   out_ = t[0];
597   in_ = in;
598   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
599   for (auto& x1 : *range[1])
600     for (auto& x0 : *range[1])
601       for (auto& a2 : *range[2])
602         for (auto& c3 : *range[0])
603           if (t[0]->is_local(c3, a2, x0, x1))
604             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a2, x0, x1}}, in, t[0], range));
605 }
606 
Task194(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)607 Task194::Task194(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[2]->nblock()*range[1]->nblock()*range[0]->nblock()*range[0]->nblock());
612   for (auto& a2 : *range[2])
613     for (auto& x0 : *range[1])
614       for (auto& c3 : *range[0])
615         for (auto& c1 : *range[0])
616           if (t[0]->is_local(c1, c3, x0, a2))
617             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c3, x0, a2}}, in, t[0], range));
618 }
619 
Task195(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)620 Task195::Task195(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[2]->nblock()*range[0]->nblock());
625   for (auto& x1 : *range[1])
626     for (auto& x0 : *range[1])
627       for (auto& a2 : *range[2])
628         for (auto& c1 : *range[0])
629           if (t[0]->is_local(c1, a2, x0, x1))
630             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a2, x0, x1}}, in, t[0], range));
631 }
632 
Task196(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)633 Task196::Task196(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[2]->nblock()*range[1]->nblock()*range[0]->nblock()*range[0]->nblock());
638   for (auto& a2 : *range[2])
639     for (auto& x0 : *range[1])
640       for (auto& c3 : *range[0])
641         for (auto& c1 : *range[0])
642           if (t[0]->is_local(c1, c3, x0, a2))
643             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c3, x0, a2}}, in, t[0], range));
644 }
645 
Task197(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)646 Task197::Task197(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[2]->nblock());
651   for (auto& x0 : *range[1])
652     for (auto& a4 : *range[2])
653       if (t[0]->is_local(a4, x0))
654         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a4, x0}}, in, t[0], range));
655 }
656 
Task198(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)657 Task198::Task198(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
658   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
659   out_ = t[0];
660   in_ = in;
661   subtasks_.reserve(range[1]->nblock()*range[2]->nblock());
662   for (auto& x0 : *range[1])
663     for (auto& a4 : *range[2])
664       if (t[0]->is_local(a4, x0))
665         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a4, x0}}, in, t[0], range));
666 }
667 
Task199(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)668 Task199::Task199(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
669   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
670   out_ = t[0];
671   in_ = in;
672   subtasks_.reserve(range[1]->nblock()*range[2]->nblock());
673   for (auto& x0 : *range[1])
674     for (auto& a4 : *range[2])
675       if (t[0]->is_local(a4, x0))
676         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a4, x0}}, in, t[0], range));
677 }
678 
679 #endif
680