1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: MRCI_gen20.cc
4 // Copyright (C) 2014 Toru Shiozaki
5 //
6 // Author: Toru Shiozaki <shiozaki@northwestern.edu>
7 // Maintainer: Shiozaki group
8 //
9 // This file is part of the BAGEL package.
10 //
11 // This program is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU General Public License as published by
13 // the Free Software Foundation, either version 3 of the License, or
14 // (at your option) any later version.
15 //
16 // This program is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU General Public License
22 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
23 //
24 
25 #include <bagel_config.h>
26 #ifdef COMPILE_SMITH
27 
28 #include <src/smith/mrci/MRCI_tasks20.h>
29 
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::MRCI;
34 
Task950(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)35 Task950::Task950(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[2]->nblock()*range[0]->nblock()*range[1]->nblock()*range[1]->nblock());
40   for (auto& a2 : *range[2])
41     for (auto& c1 : *range[0])
42       for (auto& x0 : *range[1])
43         for (auto& x1 : *range[1])
44           if (t[0]->is_local(x1, x0, c1, a2))
45             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x0, c1, a2}}, in, t[0], range));
46 }
47 
Task951(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)48 Task951::Task951(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
49   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
50   out_ = t[0];
51   in_ = in;
52   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
53   for (auto& a1 : *range[2])
54     for (auto& x0 : *range[1])
55       for (auto& x2 : *range[1])
56         for (auto& x1 : *range[1])
57           if (t[0]->is_local(x1, x2, x0, a1))
58             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x2, x0, a1}}, in, t[0], range));
59 }
60 
Task952(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)61 Task952::Task952(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[2]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
66   for (auto& a1 : *range[2])
67     for (auto& x1 : *range[1])
68       for (auto& x2 : *range[1])
69         for (auto& x0 : *range[1])
70           if (t[0]->is_local(x0, x2, x1, a1))
71             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x2, x1, a1}}, in, t[0], range));
72 }
73 
Task953(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)74 Task953::Task953(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[2]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
79   for (auto& a1 : *range[2])
80     for (auto& x1 : *range[1])
81       for (auto& x2 : *range[1])
82         for (auto& x0 : *range[1])
83           if (t[0]->is_local(x0, x2, x1, a1))
84             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x2, x1, a1}}, in, t[0], range));
85 }
86 
Task954(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)87 Task954::Task954(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
88   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
89   out_ = t[0];
90   in_ = in;
91   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
92   for (auto& a1 : *range[2])
93     for (auto& x1 : *range[1])
94       for (auto& x2 : *range[1])
95         for (auto& x0 : *range[1])
96           if (t[0]->is_local(x0, x2, x1, a1))
97             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x2, x1, a1}}, in, t[0], range));
98 }
99 
Task955(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)100 Task955::Task955(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
101   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
102   out_ = t[0];
103   in_ = in;
104   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[1]->nblock()*range[0]->nblock());
105   for (auto& x0 : *range[1])
106     for (auto& c1 : *range[0])
107       for (auto& x1 : *range[1])
108         for (auto& c2 : *range[0])
109           if (t[0]->is_local(c2, x1, c1, x0))
110             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, x1, c1, x0}}, in, t[0], range));
111 }
112 
Task956(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)113 Task956::Task956(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[0]->nblock()*range[0]->nblock()*range[1]->nblock()*range[1]->nblock());
118   for (auto& c2 : *range[0])
119     for (auto& c1 : *range[0])
120       for (auto& x1 : *range[1])
121         for (auto& x0 : *range[1])
122           if (t[0]->is_local(x0, x1, c1, c2))
123             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x1, c1, c2}}, in, t[0], range));
124 }
125 
Task957(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)126 Task957::Task957(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[1]->nblock()*range[0]->nblock());
131   for (auto& a2 : *range[2])
132     for (auto& c1 : *range[0])
133       for (auto& x0 : *range[1])
134         for (auto& c3 : *range[0])
135           if (t[0]->is_local(c3, x0, c1, a2))
136             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, x0, c1, a2}}, in, t[0], range));
137 }
138 
Task958(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)139 Task958::Task958(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[2]->nblock()*range[0]->nblock()*range[0]->nblock()*range[1]->nblock());
144   for (auto& a2 : *range[2])
145     for (auto& c1 : *range[0])
146       for (auto& c3 : *range[0])
147         for (auto& x0 : *range[1])
148           if (t[0]->is_local(x0, c3, c1, a2))
149             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, c3, c1, a2}}, in, t[0], range));
150 }
151 
Task959(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)152 Task959::Task959(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
153   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
154   out_ = t[0];
155   in_ = in;
156   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[0]->nblock()*range[1]->nblock());
157   for (auto& a2 : *range[2])
158     for (auto& c1 : *range[0])
159       for (auto& c3 : *range[0])
160         for (auto& x0 : *range[1])
161           if (t[0]->is_local(x0, c3, c1, a2))
162             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, c3, c1, a2}}, in, t[0], range));
163 }
164 
Task960(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)165 Task960::Task960(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
166   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
167   out_ = t[0];
168   in_ = in;
169   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
170   for (auto& a2 : *range[2])
171     for (auto& c1 : *range[0])
172       for (auto& a4 : *range[2])
173         for (auto& c3 : *range[0])
174           if (t[0]->is_local(c3, a4, c1, a2))
175             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, c1, a2}}, in, t[0], range));
176 }
177 
Task961(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)178 Task961::Task961(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[0]->nblock());
183   for (auto& a2 : *range[2])
184     for (auto& c3 : *range[0])
185       for (auto& a4 : *range[2])
186         for (auto& c1 : *range[0])
187           if (t[0]->is_local(c1, a4, c3, a2))
188             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a4, c3, a2}}, in, t[0], range));
189 }
190 
Task962(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)191 Task962::Task962(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
192   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
193   out_ = t[0];
194   in_ = in;
195   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
196   for (auto& a1 : *range[2])
197     for (auto& x0 : *range[1])
198       for (auto& a3 : *range[2])
199         for (auto& c2 : *range[0])
200           if (t[0]->is_local(c2, a3, x0, a1))
201             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, a3, x0, a1}}, in, t[0], range));
202 }
203 
Task963(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)204 Task963::Task963(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
205   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
206   out_ = t[0];
207   in_ = in;
208   subtasks_.reserve(range[1]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
209   for (auto& x0 : *range[1])
210     for (auto& a1 : *range[2])
211       for (auto& c2 : *range[0])
212         for (auto& a3 : *range[2])
213           if (t[0]->is_local(a3, c2, a1, x0))
214             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a3, c2, a1, x0}}, in, t[0], range));
215 }
216 
Task964(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)217 Task964::Task964(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
218   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
219   out_ = t[0];
220   in_ = in;
221   subtasks_.reserve(range[1]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
222   for (auto& x0 : *range[1])
223     for (auto& a1 : *range[2])
224       for (auto& c2 : *range[0])
225         for (auto& a3 : *range[2])
226           if (t[0]->is_local(a3, c2, a1, x0))
227             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a3, c2, a1, x0}}, in, t[0], range));
228 }
229 
Task965(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)230 Task965::Task965(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
231   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
232   out_ = t[0];
233   in_ = in;
234   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[2]->nblock()*range[1]->nblock());
235   for (auto& a1 : *range[2])
236     for (auto& x0 : *range[1])
237       for (auto& a2 : *range[2])
238         for (auto& x1 : *range[1])
239           if (t[0]->is_local(x1, a2, x0, a1))
240             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a2, x0, a1}}, in, t[0], range));
241 }
242 
Task966(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)243 Task966::Task966(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[2]->nblock()*range[1]->nblock()*range[1]->nblock());
248   for (auto& a2 : *range[2])
249     for (auto& a1 : *range[2])
250       for (auto& x1 : *range[1])
251         for (auto& x0 : *range[1])
252           if (t[0]->is_local(x0, x1, a1, a2))
253             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x1, a1, a2}}, in, t[0], range));
254 }
255 
Task967(vector<shared_ptr<Tensor>> t,const bool reset)256 Task967::Task967(vector<shared_ptr<Tensor>> t, const bool reset) : reset_(reset) {
257   n_ =  t[0];
258 }
259 
Task968(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)260 Task968::Task968(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
261   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
262   out_ = t[0];
263   in_ = in;
264   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[1]->nblock()*range[0]->nblock());
265   for (auto& x0 : *range[1])
266     for (auto& c1 : *range[0])
267       for (auto& x1 : *range[1])
268         for (auto& c2 : *range[0])
269           if (t[0]->is_local(c2, x1, c1, x0))
270             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, x1, c1, x0}}, in, t[0], range));
271 }
272 
Task969(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)273 Task969::Task969(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
274   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
275   out_ = t[0];
276   in_ = in;
277   subtasks_.reserve(range[0]->nblock()*range[0]->nblock()*range[1]->nblock()*range[1]->nblock());
278   for (auto& c2 : *range[0])
279     for (auto& c1 : *range[0])
280       for (auto& x1 : *range[1])
281         for (auto& x0 : *range[1])
282           if (t[0]->is_local(x0, x1, c1, c2))
283             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x1, c1, c2}}, in, t[0], range));
284 }
285 
Task970(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)286 Task970::Task970(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
287   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
288   out_ = t[0];
289   in_ = in;
290   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
291   for (auto& x1 : *range[1])
292     for (auto& x0 : *range[1])
293       for (auto& x2 : *range[1])
294         for (auto& c1 : *range[0])
295           if (t[0]->is_local(c1, x2, x0, x1))
296             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, x2, x0, x1}}, in, t[0], range));
297 }
298 
Task971(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)299 Task971::Task971(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
300   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
301   out_ = t[0];
302   in_ = in;
303   subtasks_.reserve(range[0]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
304   for (auto& c1 : *range[0])
305     for (auto& x0 : *range[1])
306       for (auto& x1 : *range[1])
307         for (auto& x2 : *range[1])
308           if (t[0]->is_local(x2, x1, x0, c1))
309             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x2, x1, x0, c1}}, in, t[0], range));
310 }
311 
Task972(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)312 Task972::Task972(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
313   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
314   out_ = t[0];
315   in_ = in;
316   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[1]->nblock()*range[0]->nblock());
317   for (auto& a2 : *range[2])
318     for (auto& c1 : *range[0])
319       for (auto& x0 : *range[1])
320         for (auto& c3 : *range[0])
321           if (t[0]->is_local(c3, x0, c1, a2))
322             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, x0, c1, a2}}, in, t[0], range));
323 }
324 
Task973(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)325 Task973::Task973(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
326   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
327   out_ = t[0];
328   in_ = in;
329   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[1]->nblock());
330   for (auto& c1 : *range[0])
331     for (auto& a2 : *range[2])
332       for (auto& c3 : *range[0])
333         for (auto& x0 : *range[1])
334           if (t[0]->is_local(x0, c3, a2, c1))
335             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, c3, a2, c1}}, in, t[0], range));
336 }
337 
Task974(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)338 Task974::Task974(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
339   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
340   out_ = t[0];
341   in_ = in;
342   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[1]->nblock());
343   for (auto& c1 : *range[0])
344     for (auto& a2 : *range[2])
345       for (auto& c3 : *range[0])
346         for (auto& x0 : *range[1])
347           if (t[0]->is_local(x0, c3, a2, c1))
348             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, c3, a2, c1}}, in, t[0], range));
349 }
350 
Task975(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)351 Task975::Task975(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
352   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
353   out_ = t[0];
354   in_ = in;
355   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[1]->nblock()*range[0]->nblock());
356   for (auto& a1 : *range[2])
357     for (auto& x0 : *range[1])
358       for (auto& x1 : *range[1])
359         for (auto& c2 : *range[0])
360           if (t[0]->is_local(c2, x1, x0, a1))
361             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, x1, x0, a1}}, in, t[0], range));
362 }
363 
Task976(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)364 Task976::Task976(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
365   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
366   out_ = t[0];
367   in_ = in;
368   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[1]->nblock()*range[1]->nblock());
369   for (auto& c2 : *range[0])
370     for (auto& a1 : *range[2])
371       for (auto& x1 : *range[1])
372         for (auto& x0 : *range[1])
373           if (t[0]->is_local(x0, x1, a1, c2))
374             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x1, a1, c2}}, in, t[0], range));
375 }
376 
Task977(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)377 Task977::Task977(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
378   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
379   out_ = t[0];
380   in_ = in;
381   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[1]->nblock()*range[1]->nblock());
382   for (auto& c2 : *range[0])
383     for (auto& a1 : *range[2])
384       for (auto& x1 : *range[1])
385         for (auto& x0 : *range[1])
386           if (t[0]->is_local(x0, x1, a1, c2))
387             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x1, a1, c2}}, in, t[0], range));
388 }
389 
Task978(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)390 Task978::Task978(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
391   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
392   out_ = t[0];
393   in_ = in;
394   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[1]->nblock()*range[1]->nblock());
395   for (auto& a2 : *range[2])
396     for (auto& c1 : *range[0])
397       for (auto& x1 : *range[1])
398         for (auto& x0 : *range[1])
399           if (t[0]->is_local(x0, x1, c1, a2))
400             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x1, c1, a2}}, in, t[0], range));
401 }
402 
Task979(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)403 Task979::Task979(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
404   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
405   out_ = t[0];
406   in_ = in;
407   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[1]->nblock()*range[1]->nblock());
408   for (auto& c1 : *range[0])
409     for (auto& a2 : *range[2])
410       for (auto& x0 : *range[1])
411         for (auto& x1 : *range[1])
412           if (t[0]->is_local(x1, x0, a2, c1))
413             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x0, a2, c1}}, in, t[0], range));
414 }
415 
Task980(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)416 Task980::Task980(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
417   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
418   out_ = t[0];
419   in_ = in;
420   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[1]->nblock()*range[1]->nblock());
421   for (auto& c1 : *range[0])
422     for (auto& a2 : *range[2])
423       for (auto& x0 : *range[1])
424         for (auto& x1 : *range[1])
425           if (t[0]->is_local(x1, x0, a2, c1))
426             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x0, a2, c1}}, in, t[0], range));
427 }
428 
Task981(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)429 Task981::Task981(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
430   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
431   out_ = t[0];
432   in_ = in;
433   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
434   for (auto& a1 : *range[2])
435     for (auto& x0 : *range[1])
436       for (auto& x2 : *range[1])
437         for (auto& x1 : *range[1])
438           if (t[0]->is_local(x1, x2, x0, a1))
439             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, x2, x0, a1}}, in, t[0], range));
440 }
441 
Task982(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)442 Task982::Task982(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
443   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
444   out_ = t[0];
445   in_ = in;
446   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[1]->nblock()*range[1]->nblock());
447   for (auto& a1 : *range[2])
448     for (auto& x1 : *range[1])
449       for (auto& x2 : *range[1])
450         for (auto& x0 : *range[1])
451           if (t[0]->is_local(x0, x2, x1, a1))
452             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x2, x1, a1}}, in, t[0], range));
453 }
454 
Task983(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)455 Task983::Task983(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
456   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
457   out_ = t[0];
458   in_ = in;
459   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
460   for (auto& a2 : *range[2])
461     for (auto& c1 : *range[0])
462       for (auto& a4 : *range[2])
463         for (auto& c3 : *range[0])
464           if (t[0]->is_local(c3, a4, c1, a2))
465             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, c1, a2}}, in, t[0], range));
466 }
467 
Task984(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)468 Task984::Task984(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
469   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
470   out_ = t[0];
471   in_ = in;
472   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
473   for (auto& a2 : *range[2])
474     for (auto& c3 : *range[0])
475       for (auto& a4 : *range[2])
476         for (auto& c1 : *range[0])
477           if (t[0]->is_local(c1, a4, c3, a2))
478             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a4, c3, a2}}, in, t[0], range));
479 }
480 
Task985(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)481 Task985::Task985(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
482   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
483   out_ = t[0];
484   in_ = in;
485   subtasks_.reserve(range[2]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
486   for (auto& a1 : *range[2])
487     for (auto& x0 : *range[1])
488       for (auto& a3 : *range[2])
489         for (auto& c2 : *range[0])
490           if (t[0]->is_local(c2, a3, x0, a1))
491             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c2, a3, x0, a1}}, in, t[0], range));
492 }
493 
Task986(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)494 Task986::Task986(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
495   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
496   out_ = t[0];
497   in_ = in;
498   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
499   for (auto& a1 : *range[2])
500     for (auto& c2 : *range[0])
501       for (auto& a3 : *range[2])
502         for (auto& x0 : *range[1])
503           if (t[0]->is_local(x0, a3, c2, a1))
504             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, a3, c2, a1}}, in, t[0], range));
505 }
506 
Task987(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)507 Task987::Task987(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[2]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
512   for (auto& a1 : *range[2])
513     for (auto& c2 : *range[0])
514       for (auto& a3 : *range[2])
515         for (auto& x0 : *range[1])
516           if (t[0]->is_local(x0, a3, c2, a1))
517             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, a3, c2, a1}}, in, t[0], range));
518 }
519 
Task988(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)520 Task988::Task988(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[2]->nblock()*range[1]->nblock()*range[2]->nblock()*range[1]->nblock());
525   for (auto& a1 : *range[2])
526     for (auto& x0 : *range[1])
527       for (auto& a2 : *range[2])
528         for (auto& x1 : *range[1])
529           if (t[0]->is_local(x1, a2, x0, a1))
530             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a2, x0, a1}}, in, t[0], range));
531 }
532 
Task989(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)533 Task989::Task989(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[2]->nblock()*range[2]->nblock()*range[1]->nblock()*range[1]->nblock());
538   for (auto& a2 : *range[2])
539     for (auto& a1 : *range[2])
540       for (auto& x1 : *range[1])
541         for (auto& x0 : *range[1])
542           if (t[0]->is_local(x0, x1, a1, a2))
543             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, x1, a1, a2}}, in, t[0], range));
544 }
545 
546 #endif
547