1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: RelCASA_gen5.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/relcasa/RelCASA_tasks5.h>
29 
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::RelCASA;
34 
Task200(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)35 Task200::Task200(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[0]->nblock()*range[2]->nblock());
40   for (auto& x1 : *range[1])
41     for (auto& x0 : *range[1])
42       for (auto& c2 : *range[0])
43         for (auto& a1 : *range[2])
44           if (t[0]->is_local(a1, c2, x0, x1))
45             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, c2, x0, x1}}, in, t[0], range));
46 }
47 
Task201(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)48 Task201::Task201(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[0]->nblock()*range[2]->nblock());
53   for (auto& x1 : *range[1])
54     for (auto& x0 : *range[1])
55       for (auto& c2 : *range[0])
56         for (auto& a1 : *range[2])
57           if (t[0]->is_local(a1, c2, x0, x1))
58             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, c2, x0, x1}}, in, t[0], range));
59 }
60 
Task202(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)61 Task202::Task202(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[0]->nblock()*range[1]->nblock()*range[2]->nblock()*range[2]->nblock());
66   for (auto& c2 : *range[0])
67     for (auto& x0 : *range[1])
68       for (auto& a1 : *range[2])
69         for (auto& a3 : *range[2])
70           if (t[0]->is_local(a3, a1, x0, c2))
71             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a3, a1, x0, c2}}, in, t[0], range));
72 }
73 
Task203(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)74 Task203::Task203(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
75   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
76   out_ = t[0];
77   in_ = in;
78   subtasks_.reserve(range[1]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
79   for (auto& x0 : *range[1])
80     for (auto& a3 : *range[2])
81       for (auto& c2 : *range[0])
82         for (auto& a4 : *range[2])
83           if (t[0]->is_local(a4, c2, a3, x0))
84             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a4, c2, a3, x0}}, in, t[0], range));
85 }
86 
Task204(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)87 Task204::Task204(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
88   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
89   out_ = t[0];
90   in_ = in;
91   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
92   for (auto& a3 : *range[2])
93     for (auto& c2 : *range[0])
94       for (auto& a4 : *range[2])
95         for (auto& x1 : *range[1])
96           if (t[0]->is_local(x1, a4, c2, a3))
97             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a4, c2, a3}}, in, t[0], range));
98 }
99 
Task205(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)100 Task205::Task205(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
101   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
102   out_ = t[0];
103   in_ = in;
104   subtasks_.reserve(range[0]->nblock()*range[1]->nblock()*range[2]->nblock()*range[2]->nblock());
105   for (auto& c2 : *range[0])
106     for (auto& x0 : *range[1])
107       for (auto& a1 : *range[2])
108         for (auto& a3 : *range[2])
109           if (t[0]->is_local(a3, a1, x0, c2))
110             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a3, a1, x0, c2}}, in, t[0], range));
111 }
112 
Task206(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)113 Task206::Task206(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
114   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
115   out_ = t[0];
116   in_ = in;
117   subtasks_.reserve(range[1]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
118   for (auto& x0 : *range[1])
119     for (auto& a1 : *range[2])
120       for (auto& c2 : *range[0])
121         for (auto& a4 : *range[2])
122           if (t[0]->is_local(a4, c2, a1, x0))
123             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a4, c2, a1, x0}}, in, t[0], range));
124 }
125 
Task207(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)126 Task207::Task207(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
127   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
128   out_ = t[0];
129   in_ = in;
130   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
131   for (auto& a1 : *range[2])
132     for (auto& c2 : *range[0])
133       for (auto& a4 : *range[2])
134         for (auto& x1 : *range[1])
135           if (t[0]->is_local(x1, a4, c2, a1))
136             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a4, c2, a1}}, in, t[0], range));
137 }
138 
Task208(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)139 Task208::Task208(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
140   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
141   out_ = t[0];
142   in_ = in;
143   subtasks_.reserve(range[0]->nblock()*range[1]->nblock()*range[2]->nblock()*range[2]->nblock());
144   for (auto& c2 : *range[0])
145     for (auto& x0 : *range[1])
146       for (auto& a1 : *range[2])
147         for (auto& a3 : *range[2])
148           if (t[0]->is_local(a3, a1, x0, c2))
149             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a3, a1, x0, c2}}, in, t[0], range));
150 }
151 
Task209(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range,const double e)152 Task209::Task209(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range, const double e) {
153   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
154   out_ = t[0];
155   in_ = in;
156   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
157   for (auto& a1 : *range[2])
158     for (auto& c2 : *range[0])
159       for (auto& a3 : *range[2])
160         for (auto& x1 : *range[1])
161           if (t[0]->is_local(x1, a3, c2, a1))
162             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a3, c2, a1}}, in, t[0], range, e));
163 }
164 
Task210(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)165 Task210::Task210(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
166   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
167   out_ = t[0];
168   in_ = in;
169   subtasks_.reserve(range[0]->nblock()*range[1]->nblock()*range[2]->nblock()*range[2]->nblock());
170   for (auto& c2 : *range[0])
171     for (auto& x0 : *range[1])
172       for (auto& a1 : *range[2])
173         for (auto& a3 : *range[2])
174           if (t[0]->is_local(a3, a1, x0, c2))
175             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a3, a1, x0, c2}}, in, t[0], range));
176 }
177 
Task211(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)178 Task211::Task211(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
179   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
180   out_ = t[0];
181   in_ = in;
182   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
183   for (auto& a1 : *range[2])
184     for (auto& c2 : *range[0])
185       for (auto& a3 : *range[2])
186         for (auto& x3 : *range[1])
187           if (t[0]->is_local(x3, a3, c2, a1))
188             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, a3, c2, a1}}, in, t[0], range));
189 }
190 
Task212(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)191 Task212::Task212(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
192   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
193   out_ = t[0];
194   in_ = in;
195   subtasks_.reserve(range[0]->nblock()*range[1]->nblock()*range[2]->nblock()*range[2]->nblock());
196   for (auto& c2 : *range[0])
197     for (auto& x0 : *range[1])
198       for (auto& a1 : *range[2])
199         for (auto& a3 : *range[2])
200           if (t[0]->is_local(a3, a1, x0, c2))
201             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a3, a1, x0, c2}}, in, t[0], range));
202 }
203 
Task213(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)204 Task213::Task213(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
205   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
206   out_ = t[0];
207   in_ = in;
208   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
209   for (auto& a1 : *range[2])
210     for (auto& c2 : *range[0])
211       for (auto& a3 : *range[2])
212         for (auto& x5 : *range[1])
213           if (t[0]->is_local(x5, a3, c2, a1))
214             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x5, a3, c2, a1}}, in, t[0], range));
215 }
216 
Task214(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)217 Task214::Task214(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
218   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
219   out_ = t[0];
220   in_ = in;
221   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[2]->nblock()*range[1]->nblock());
222   for (auto& a1 : *range[2])
223     for (auto& x0 : *range[1])
224       for (auto& a2 : *range[2])
225         for (auto& x1 : *range[1])
226           if (t[0]->is_local(x1, a2, x0, a1))
227             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a2, x0, a1}}, in, t[0], range));
228 }
229 
Task215(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)230 Task215::Task215(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
231   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
232   out_ = t[0];
233   in_ = in;
234   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[2]->nblock());
235   for (auto& x1 : *range[1])
236     for (auto& x0 : *range[1])
237       for (auto& a2 : *range[2])
238         for (auto& a1 : *range[2])
239           if (t[0]->is_local(a1, a2, x0, x1))
240             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, a2, x0, x1}}, in, t[0], range));
241 }
242 
Task216(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)243 Task216::Task216(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[1]->nblock()*range[2]->nblock()*range[2]->nblock()*range[1]->nblock());
248   for (auto& x2 : *range[1])
249     for (auto& a2 : *range[2])
250       for (auto& a1 : *range[2])
251         for (auto& x3 : *range[1])
252           if (t[0]->is_local(x3, a1, a2, x2))
253             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x3, a1, a2, x2}}, in, t[0], range));
254 }
255 
Task217(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)256 Task217::Task217(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[1]->nblock()*range[2]->nblock()*range[2]->nblock());
261   for (auto& x1 : *range[1])
262     for (auto& x0 : *range[1])
263       for (auto& a2 : *range[2])
264         for (auto& a1 : *range[2])
265           if (t[0]->is_local(a1, a2, x0, x1))
266             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, a2, x0, x1}}, in, t[0], range));
267 }
268 
Task218(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)269 Task218::Task218(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[1]->nblock()*range[1]->nblock()*range[2]->nblock());
274   for (auto& x1 : *range[1])
275     for (auto& x2 : *range[1])
276       for (auto& x0 : *range[1])
277         for (auto& a1 : *range[2])
278           if (t[0]->is_local(a1, x0, x2, x1))
279             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, x0, x2, x1}}, in, t[0], range));
280 }
281 
Task219(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)282 Task219::Task219(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[1]->nblock()*range[2]->nblock()*range[2]->nblock());
287   for (auto& x1 : *range[1])
288     for (auto& x0 : *range[1])
289       for (auto& a2 : *range[2])
290         for (auto& a1 : *range[2])
291           if (t[0]->is_local(a1, a2, x0, x1))
292             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, a2, x0, x1}}, in, t[0], range));
293 }
294 
Task220(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)295 Task220::Task220(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[1]->nblock()*range[2]->nblock()*range[2]->nblock());
300   for (auto& x1 : *range[1])
301     for (auto& x0 : *range[1])
302       for (auto& a3 : *range[2])
303         for (auto& a1 : *range[2])
304           if (t[0]->is_local(a1, a3, x0, x1))
305             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, a3, x0, x1}}, in, t[0], range));
306 }
307 
Task221(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)308 Task221::Task221(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
309   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
310   out_ = t[0];
311   in_ = in;
312   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[1]->nblock()*range[0]->nblock());
313   for (auto& x0 : *range[1])
314     for (auto& c1 : *range[0])
315       for (auto& x1 : *range[1])
316         for (auto& c2 : *range[0])
317           if (t[0]->is_local(c2, x1, c1, x0))
318             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, x1, c1, x0}}, in, t[0], range));
319 }
320 
Task222(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range,const double e)321 Task222::Task222(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range, const double e) {
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[0]->nblock()*range[0]->nblock());
326   for (auto& x1 : *range[1])
327     for (auto& x0 : *range[1])
328       for (auto& c2 : *range[0])
329         for (auto& c1 : *range[0])
330           if (t[0]->is_local(c1, c2, x0, x1))
331             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c2, x0, x1}}, in, t[0], range, e));
332 }
333 
Task223(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)334 Task223::Task223(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[1]->nblock()*range[0]->nblock()*range[0]->nblock());
339   for (auto& x1 : *range[1])
340     for (auto& x0 : *range[1])
341       for (auto& c2 : *range[0])
342         for (auto& c1 : *range[0])
343           if (t[0]->is_local(c1, c2, x0, x1))
344             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c2, x0, x1}}, in, t[0], range));
345 }
346 
Task224(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)347 Task224::Task224(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[1]->nblock()*range[0]->nblock()*range[0]->nblock());
352   for (auto& x1 : *range[1])
353     for (auto& x0 : *range[1])
354       for (auto& c2 : *range[0])
355         for (auto& c1 : *range[0])
356           if (t[0]->is_local(c1, c2, x0, x1))
357             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c2, x0, x1}}, in, t[0], range));
358 }
359 
Task225(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)360 Task225::Task225(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
361   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
362   out_ = t[0];
363   in_ = in;
364   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
365   for (auto& a2 : *range[2])
366     for (auto& c1 : *range[0])
367       for (auto& a4 : *range[2])
368         for (auto& c3 : *range[0])
369           if (t[0]->is_local(c3, a4, c1, a2))
370             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, c1, a2}}, in, t[0], range));
371 }
372 
Task226(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range,const double e)373 Task226::Task226(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range, const double e) {
374   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
375   out_ = t[0];
376   in_ = in;
377   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
378   for (auto& a2 : *range[2])
379     for (auto& c3 : *range[0])
380       for (auto& a4 : *range[2])
381         for (auto& c1 : *range[0])
382           if (t[0]->is_local(c1, a4, c3, a2))
383             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a4, c3, a2}}, in, t[0], range, e));
384 }
385 
Task227(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)386 Task227::Task227(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[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
391   for (auto& a2 : *range[2])
392     for (auto& c3 : *range[0])
393       for (auto& a4 : *range[2])
394         for (auto& c1 : *range[0])
395           if (t[0]->is_local(c1, a4, c3, a2))
396             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a4, c3, a2}}, in, t[0], range));
397 }
398 
Task228(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)399 Task228::Task228(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
400   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
401   out_ = t[0];
402   in_ = in;
403   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
404   for (auto& a2 : *range[2])
405     for (auto& c3 : *range[0])
406       for (auto& a4 : *range[2])
407         for (auto& c1 : *range[0])
408           if (t[0]->is_local(c1, a4, c3, a2))
409             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a4, c3, a2}}, in, t[0], range));
410 }
411 
Task229(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)412 Task229::Task229(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[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
417   for (auto& a2 : *range[2])
418     for (auto& c3 : *range[0])
419       for (auto& a4 : *range[2])
420         for (auto& c1 : *range[0])
421           if (t[0]->is_local(c1, a4, c3, a2))
422             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a4, c3, a2}}, in, t[0], range));
423 }
424 
Task230(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)425 Task230::Task230(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
426   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
427   out_ = t[0];
428   in_ = in;
429   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
430   for (auto& a2 : *range[2])
431     for (auto& c3 : *range[0])
432       for (auto& a4 : *range[2])
433         for (auto& c1 : *range[0])
434           if (t[0]->is_local(c1, a4, c3, a2))
435             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a4, c3, a2}}, in, t[0], range));
436 }
437 
Task231(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)438 Task231::Task231(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
439   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
440   out_ = t[0];
441   in_ = in;
442   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[2]->nblock()*range[1]->nblock());
443   for (auto& a1 : *range[2])
444     for (auto& x0 : *range[1])
445       for (auto& a2 : *range[2])
446         for (auto& x1 : *range[1])
447           if (t[0]->is_local(x1, a2, x0, a1))
448             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a2, x0, a1}}, in, t[0], range));
449 }
450 
Task232(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range,const double e)451 Task232::Task232(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range, const double e) {
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[1]->nblock()*range[2]->nblock()*range[2]->nblock());
456   for (auto& x1 : *range[1])
457     for (auto& x0 : *range[1])
458       for (auto& a2 : *range[2])
459         for (auto& a1 : *range[2])
460           if (t[0]->is_local(a1, a2, x0, x1))
461             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, a2, x0, x1}}, in, t[0], range, e));
462 }
463 
Task233(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)464 Task233::Task233(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[1]->nblock()*range[2]->nblock()*range[2]->nblock());
469   for (auto& x1 : *range[1])
470     for (auto& x0 : *range[1])
471       for (auto& a2 : *range[2])
472         for (auto& a1 : *range[2])
473           if (t[0]->is_local(a1, a2, x0, x1))
474             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, a2, x0, x1}}, in, t[0], range));
475 }
476 
Task234(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)477 Task234::Task234(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
478   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
479   out_ = t[0];
480   in_ = in;
481   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[2]->nblock());
482   for (auto& x1 : *range[1])
483     for (auto& x0 : *range[1])
484       for (auto& a2 : *range[2])
485         for (auto& a1 : *range[2])
486           if (t[0]->is_local(a1, a2, x0, x1))
487             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a1, a2, x0, x1}}, in, t[0], range));
488 }
489 
Task235(vector<shared_ptr<Tensor>> t,const bool reset)490 Task235::Task235(vector<shared_ptr<Tensor>> t, const bool reset) : reset_(reset) {
491   s_ =  t[0];
492 }
493 
Task236(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)494 Task236::Task236(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
495   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
496   out_ = t[0];
497   in_ = in;
498   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[1]->nblock()*range[0]->nblock());
499   for (auto& x0 : *range[1])
500     for (auto& c1 : *range[0])
501       for (auto& x1 : *range[1])
502         for (auto& c2 : *range[0])
503           if (t[0]->is_local(c2, x1, c1, x0))
504             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, x1, c1, x0}}, in, t[0], range));
505 }
506 
Task237(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)507 Task237::Task237(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[0]->nblock()*range[0]->nblock());
512   for (auto& x1 : *range[1])
513     for (auto& x0 : *range[1])
514       for (auto& c2 : *range[0])
515         for (auto& c1 : *range[0])
516           if (t[0]->is_local(c1, c2, x0, x1))
517             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, c2, x0, x1}}, in, t[0], range));
518 }
519 
Task238(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)520 Task238::Task238(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
521   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
522   out_ = t[0];
523   in_ = in;
524   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
525   for (auto& x1 : *range[1])
526     for (auto& x0 : *range[1])
527       for (auto& x2 : *range[1])
528         for (auto& c1 : *range[0])
529           if (t[0]->is_local(c1, x2, x0, x1))
530             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x0, x1}}, in, t[0], range));
531 }
532 
Task239(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)533 Task239::Task239(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
534   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
535   out_ = t[0];
536   in_ = in;
537   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
538   for (auto& x0 : *range[1])
539     for (auto& x1 : *range[1])
540       for (auto& x2 : *range[1])
541         for (auto& c1 : *range[0])
542           if (t[0]->is_local(c1, x2, x1, x0))
543             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x1, x0}}, in, t[0], range));
544 }
545 
Task240(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)546 Task240::Task240(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
547   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
548   out_ = t[0];
549   in_ = in;
550   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
551   for (auto& x0 : *range[1])
552     for (auto& x1 : *range[1])
553       for (auto& x2 : *range[1])
554         for (auto& c1 : *range[0])
555           if (t[0]->is_local(c1, x2, x1, x0))
556             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x1, x0}}, in, t[0], range));
557 }
558 
Task241(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)559 Task241::Task241(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
560   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
561   out_ = t[0];
562   in_ = in;
563   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
564   for (auto& x0 : *range[1])
565     for (auto& x1 : *range[1])
566       for (auto& x2 : *range[1])
567         for (auto& c1 : *range[0])
568           if (t[0]->is_local(c1, x2, x1, x0))
569             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x1, x0}}, in, t[0], range));
570 }
571 
Task242(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)572 Task242::Task242(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
573   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
574   out_ = t[0];
575   in_ = in;
576   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[1]->nblock()*range[0]->nblock());
577   for (auto& a2 : *range[2])
578     for (auto& c1 : *range[0])
579       for (auto& x0 : *range[1])
580         for (auto& c3 : *range[0])
581           if (t[0]->is_local(c3, x0, c1, a2))
582             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, x0, c1, a2}}, in, t[0], range));
583 }
584 
Task243(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)585 Task243::Task243(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
586   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
587   out_ = t[0];
588   in_ = in;
589   subtasks_.reserve(range[1]->nblock()*range[2]->nblock()*range[0]->nblock()*range[0]->nblock());
590   for (auto& x0 : *range[1])
591     for (auto& a2 : *range[2])
592       for (auto& c1 : *range[0])
593         for (auto& c3 : *range[0])
594           if (t[0]->is_local(c3, c1, a2, x0))
595             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, c1, a2, x0}}, in, t[0], range));
596 }
597 
Task244(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)598 Task244::Task244(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
599   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
600   out_ = t[0];
601   in_ = in;
602   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[1]->nblock()*range[0]->nblock());
603   for (auto& a2 : *range[2])
604     for (auto& c1 : *range[0])
605       for (auto& x1 : *range[1])
606         for (auto& c3 : *range[0])
607           if (t[0]->is_local(c3, x1, c1, a2))
608             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, x1, c1, a2}}, in, t[0], range));
609 }
610 
Task245(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)611 Task245::Task245(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
612   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
613   out_ = t[0];
614   in_ = in;
615   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
616   for (auto& a1 : *range[2])
617     for (auto& x0 : *range[1])
618       for (auto& x1 : *range[1])
619         for (auto& c2 : *range[0])
620           if (t[0]->is_local(c2, x1, x0, a1))
621             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, x1, x0, a1}}, in, t[0], range));
622 }
623 
Task246(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)624 Task246::Task246(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
625   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
626   out_ = t[0];
627   in_ = in;
628   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
629   for (auto& x0 : *range[1])
630     for (auto& x1 : *range[1])
631       for (auto& a1 : *range[2])
632         for (auto& c2 : *range[0])
633           if (t[0]->is_local(c2, a1, x1, x0))
634             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, a1, x1, x0}}, in, t[0], range));
635 }
636 
Task247(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)637 Task247::Task247(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
638   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
639   out_ = t[0];
640   in_ = in;
641   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
642   for (auto& x2 : *range[1])
643     for (auto& x3 : *range[1])
644       for (auto& a1 : *range[2])
645         for (auto& c2 : *range[0])
646           if (t[0]->is_local(c2, a1, x3, x2))
647             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, a1, x3, x2}}, in, t[0], range));
648 }
649 
Task248(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)650 Task248::Task248(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
651   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
652   out_ = t[0];
653   in_ = in;
654   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
655   for (auto& x0 : *range[1])
656     for (auto& x1 : *range[1])
657       for (auto& a1 : *range[2])
658         for (auto& c2 : *range[0])
659           if (t[0]->is_local(c2, a1, x1, x0))
660             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, a1, x1, x0}}, in, t[0], range));
661 }
662 
Task249(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)663 Task249::Task249(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
664   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
665   out_ = t[0];
666   in_ = in;
667   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
668   for (auto& x0 : *range[1])
669     for (auto& x1 : *range[1])
670       for (auto& a1 : *range[2])
671         for (auto& c2 : *range[0])
672           if (t[0]->is_local(c2, a1, x1, x0))
673             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, a1, x1, x0}}, in, t[0], range));
674 }
675 
676 #endif
677