1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: MRCI_gen14.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_tasks14.h>
29 
30 using namespace std;
31 using namespace bagel;
32 using namespace bagel::SMITH;
33 using namespace bagel::SMITH::MRCI;
34 
Task650(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)35 Task650::Task650(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
36   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
37   out_ = t[0];
38   in_ = in;
39   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[0]->nblock()*range[1]->nblock());
40   for (auto& a2 : *range[2])
41     for (auto& c3 : *range[0])
42       for (auto& c5 : *range[0])
43         for (auto& x0 : *range[1])
44           if (t[0]->is_local(x0, c5, c3, a2))
45             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, c5, c3, a2}}, in, t[0], range));
46 }
47 
Task651(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)48 Task651::Task651(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[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
53   for (auto& c3 : *range[0])
54     for (auto& a4 : *range[2])
55       for (auto& c1 : *range[0])
56         for (auto& a2 : *range[2])
57           if (t[0]->is_local(a2, c1, a4, c3))
58             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
59 }
60 
Task652(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)61 Task652::Task652(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[2]->nblock()*range[0]->nblock()*range[0]->nblock());
66   for (auto& x1 : *range[1])
67     for (auto& a4 : *range[2])
68       for (auto& c3 : *range[0])
69         for (auto& c5 : *range[0])
70           if (t[0]->is_local(c5, c3, a4, x1))
71             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c5, c3, a4, x1}}, in, t[0], range));
72 }
73 
Task653(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)74 Task653::Task653(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
75   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
76   out_ = t[0];
77   in_ = in;
78   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[0]->nblock()*range[1]->nblock());
79   for (auto& a4 : *range[2])
80     for (auto& c3 : *range[0])
81       for (auto& c5 : *range[0])
82         for (auto& x0 : *range[1])
83           if (t[0]->is_local(x0, c5, c3, a4))
84             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, c5, c3, a4}}, in, t[0], range));
85 }
86 
Task654(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)87 Task654::Task654(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[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
92   for (auto& c3 : *range[0])
93     for (auto& a4 : *range[2])
94       for (auto& c1 : *range[0])
95         for (auto& a2 : *range[2])
96           if (t[0]->is_local(a2, c1, a4, c3))
97             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
98 }
99 
Task655(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)100 Task655::Task655(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[1]->nblock()*range[2]->nblock()*range[0]->nblock()*range[0]->nblock());
105   for (auto& x1 : *range[1])
106     for (auto& a2 : *range[2])
107       for (auto& c3 : *range[0])
108         for (auto& c5 : *range[0])
109           if (t[0]->is_local(c5, c3, a2, x1))
110             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c5, c3, a2, x1}}, in, t[0], range));
111 }
112 
Task656(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)113 Task656::Task656(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
114   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
115   out_ = t[0];
116   in_ = in;
117   subtasks_.reserve(range[2]->nblock()*range[0]->nblock()*range[0]->nblock()*range[1]->nblock());
118   for (auto& a2 : *range[2])
119     for (auto& c3 : *range[0])
120       for (auto& c5 : *range[0])
121         for (auto& x0 : *range[1])
122           if (t[0]->is_local(x0, c5, c3, a2))
123             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, c5, c3, a2}}, in, t[0], range));
124 }
125 
Task657(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)126 Task657::Task657(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
127   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
128   out_ = t[0];
129   in_ = in;
130   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
131   for (auto& c3 : *range[0])
132     for (auto& a4 : *range[2])
133       for (auto& c1 : *range[0])
134         for (auto& a2 : *range[2])
135           if (t[0]->is_local(a2, c1, a4, c3))
136             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
137 }
138 
Task658(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)139 Task658::Task658(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[1]->nblock()*range[2]->nblock()*range[0]->nblock()*range[0]->nblock());
144   for (auto& x1 : *range[1])
145     for (auto& a4 : *range[2])
146       for (auto& c3 : *range[0])
147         for (auto& c5 : *range[0])
148           if (t[0]->is_local(c5, c3, a4, x1))
149             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c5, c3, a4, x1}}, in, t[0], range));
150 }
151 
Task659(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)152 Task659::Task659(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
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[0]->nblock()*range[1]->nblock());
157   for (auto& a4 : *range[2])
158     for (auto& c3 : *range[0])
159       for (auto& c5 : *range[0])
160         for (auto& x0 : *range[1])
161           if (t[0]->is_local(x0, c5, c3, a4))
162             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x0, c5, c3, a4}}, in, t[0], range));
163 }
164 
Task660(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)165 Task660::Task660(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[2]->nblock()*range[0]->nblock()*range[2]->nblock());
170   for (auto& c3 : *range[0])
171     for (auto& a4 : *range[2])
172       for (auto& c1 : *range[0])
173         for (auto& a2 : *range[2])
174           if (t[0]->is_local(a2, c1, a4, c3))
175             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
176 }
177 
Task661(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)178 Task661::Task661(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
179   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
180   out_ = t[0];
181   in_ = in;
182   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[0]->nblock());
183   for (auto& x0 : *range[1])
184     for (auto& c3 : *range[0])
185       for (auto& a5 : *range[2])
186         for (auto& c1 : *range[0])
187           if (t[0]->is_local(c1, a5, c3, x0))
188             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a5, c3, x0}}, in, t[0], range));
189 }
190 
Task662(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)191 Task662::Task662(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[2]->nblock()*range[0]->nblock()*range[2]->nblock());
196   for (auto& c3 : *range[0])
197     for (auto& a4 : *range[2])
198       for (auto& c1 : *range[0])
199         for (auto& a2 : *range[2])
200           if (t[0]->is_local(a2, c1, a4, c3))
201             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
202 }
203 
Task663(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)204 Task663::Task663(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[0]->nblock()*range[2]->nblock()*range[0]->nblock());
209   for (auto& x0 : *range[1])
210     for (auto& c3 : *range[0])
211       for (auto& a5 : *range[2])
212         for (auto& c1 : *range[0])
213           if (t[0]->is_local(c1, a5, c3, x0))
214             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c1, a5, c3, x0}}, in, t[0], range));
215 }
216 
Task664(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)217 Task664::Task664(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[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
222   for (auto& c3 : *range[0])
223     for (auto& a4 : *range[2])
224       for (auto& c1 : *range[0])
225         for (auto& a2 : *range[2])
226           if (t[0]->is_local(a2, c1, a4, c3))
227             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
228 }
229 
Task665(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)230 Task665::Task665(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[0]->nblock());
235   for (auto& x2 : *range[1])
236     for (auto& x3 : *range[1])
237       for (auto& a2 : *range[2])
238         for (auto& c3 : *range[0])
239           if (t[0]->is_local(c3, a2, x3, x2))
240             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a2, x3, x2}}, in, t[0], range));
241 }
242 
Task666(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)243 Task666::Task666(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
244   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
245   out_ = t[0];
246   in_ = in;
247   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
248   for (auto& x0 : *range[1])
249     for (auto& x1 : *range[1])
250       for (auto& a2 : *range[2])
251         for (auto& c3 : *range[0])
252           if (t[0]->is_local(c3, a2, x1, x0))
253             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a2, x1, x0}}, in, t[0], range));
254 }
255 
Task667(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)256 Task667::Task667(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[0]->nblock());
261   for (auto& x2 : *range[1])
262     for (auto& x3 : *range[1])
263       for (auto& a2 : *range[2])
264         for (auto& c3 : *range[0])
265           if (t[0]->is_local(c3, a2, x3, x2))
266             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a2, x3, x2}}, in, t[0], range));
267 }
268 
Task668(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)269 Task668::Task668(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[2]->nblock()*range[0]->nblock());
274   for (auto& x2 : *range[1])
275     for (auto& x3 : *range[1])
276       for (auto& a2 : *range[2])
277         for (auto& c3 : *range[0])
278           if (t[0]->is_local(c3, a2, x3, x2))
279             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a2, x3, x2}}, in, t[0], range));
280 }
281 
Task669(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)282 Task669::Task669(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[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
287   for (auto& c3 : *range[0])
288     for (auto& a4 : *range[2])
289       for (auto& c1 : *range[0])
290         for (auto& a2 : *range[2])
291           if (t[0]->is_local(a2, c1, a4, c3))
292             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
293 }
294 
Task670(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)295 Task670::Task670(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[0]->nblock());
300   for (auto& x2 : *range[1])
301     for (auto& x3 : *range[1])
302       for (auto& a4 : *range[2])
303         for (auto& c3 : *range[0])
304           if (t[0]->is_local(c3, a4, x3, x2))
305             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, x3, x2}}, in, t[0], range));
306 }
307 
Task671(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)308 Task671::Task671(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[1]->nblock()*range[2]->nblock()*range[0]->nblock());
313   for (auto& x0 : *range[1])
314     for (auto& x1 : *range[1])
315       for (auto& a4 : *range[2])
316         for (auto& c3 : *range[0])
317           if (t[0]->is_local(c3, a4, x1, x0))
318             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, x1, x0}}, in, t[0], range));
319 }
320 
Task672(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)321 Task672::Task672(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
322   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
323   out_ = t[0];
324   in_ = in;
325   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
326   for (auto& x2 : *range[1])
327     for (auto& x3 : *range[1])
328       for (auto& a4 : *range[2])
329         for (auto& c3 : *range[0])
330           if (t[0]->is_local(c3, a4, x3, x2))
331             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, x3, x2}}, in, t[0], range));
332 }
333 
Task673(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)334 Task673::Task673(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[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
339   for (auto& c3 : *range[0])
340     for (auto& a4 : *range[2])
341       for (auto& c1 : *range[0])
342         for (auto& a2 : *range[2])
343           if (t[0]->is_local(a2, c1, a4, c3))
344             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
345 }
346 
Task674(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)347 Task674::Task674(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[0]->nblock()*range[2]->nblock());
352   for (auto& c5 : *range[0])
353     for (auto& a4 : *range[2])
354       if (t[0]->is_local(a4, c5))
355         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a4, c5}}, in, t[0], range));
356 }
357 
Task675(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)358 Task675::Task675(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
359   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
360   out_ = t[0];
361   in_ = in;
362   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
363   for (auto& x0 : *range[1])
364     for (auto& c5 : *range[0])
365       for (auto& a4 : *range[2])
366         for (auto& x1 : *range[1])
367           if (t[0]->is_local(x1, a4, c5, x0))
368             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a4, c5, x0}}, in, t[0], range));
369 }
370 
Task676(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)371 Task676::Task676(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
372   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
373   out_ = t[0];
374   in_ = in;
375   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
376   for (auto& c3 : *range[0])
377     for (auto& a4 : *range[2])
378       for (auto& c1 : *range[0])
379         for (auto& a2 : *range[2])
380           if (t[0]->is_local(a2, c1, a4, c3))
381             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
382 }
383 
Task677(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)384 Task677::Task677(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
385   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
386   out_ = t[0];
387   in_ = in;
388   subtasks_.reserve(range[0]->nblock()*range[2]->nblock());
389   for (auto& c5 : *range[0])
390     for (auto& a2 : *range[2])
391       if (t[0]->is_local(a2, c5))
392         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a2, c5}}, in, t[0], range));
393 }
394 
Task678(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)395 Task678::Task678(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
396   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
397   out_ = t[0];
398   in_ = in;
399   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
400   for (auto& x0 : *range[1])
401     for (auto& c5 : *range[0])
402       for (auto& a2 : *range[2])
403         for (auto& x1 : *range[1])
404           if (t[0]->is_local(x1, a2, c5, x0))
405             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a2, c5, x0}}, in, t[0], range));
406 }
407 
Task679(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)408 Task679::Task679(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
409   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
410   out_ = t[0];
411   in_ = in;
412   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
413   for (auto& c3 : *range[0])
414     for (auto& a4 : *range[2])
415       for (auto& c1 : *range[0])
416         for (auto& a2 : *range[2])
417           if (t[0]->is_local(a2, c1, a4, c3))
418             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
419 }
420 
Task680(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)421 Task680::Task680(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
422   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
423   out_ = t[0];
424   in_ = in;
425   subtasks_.reserve(range[0]->nblock()*range[2]->nblock());
426   for (auto& c1 : *range[0])
427     for (auto& a5 : *range[2])
428       if (t[0]->is_local(a5, c1))
429         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a5, c1}}, in, t[0], range));
430 }
431 
Task681(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)432 Task681::Task681(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
433   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
434   out_ = t[0];
435   in_ = in;
436   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
437   for (auto& x0 : *range[1])
438     for (auto& c1 : *range[0])
439       for (auto& a5 : *range[2])
440         for (auto& x1 : *range[1])
441           if (t[0]->is_local(x1, a5, c1, x0))
442             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a5, c1, x0}}, in, t[0], range));
443 }
444 
Task682(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)445 Task682::Task682(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
446   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
447   out_ = t[0];
448   in_ = in;
449   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
450   for (auto& c3 : *range[0])
451     for (auto& a4 : *range[2])
452       for (auto& c1 : *range[0])
453         for (auto& a2 : *range[2])
454           if (t[0]->is_local(a2, c1, a4, c3))
455             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
456 }
457 
Task683(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)458 Task683::Task683(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
459   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
460   out_ = t[0];
461   in_ = in;
462   subtasks_.reserve(range[0]->nblock()*range[2]->nblock());
463   for (auto& c1 : *range[0])
464     for (auto& a5 : *range[2])
465       if (t[0]->is_local(a5, c1))
466         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a5, c1}}, in, t[0], range));
467 }
468 
Task684(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)469 Task684::Task684(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
470   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
471   out_ = t[0];
472   in_ = in;
473   subtasks_.reserve(range[1]->nblock()*range[0]->nblock()*range[2]->nblock()*range[1]->nblock());
474   for (auto& x0 : *range[1])
475     for (auto& c1 : *range[0])
476       for (auto& a5 : *range[2])
477         for (auto& x1 : *range[1])
478           if (t[0]->is_local(x1, a5, c1, x0))
479             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{x1, a5, c1, x0}}, in, t[0], range));
480 }
481 
Task685(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)482 Task685::Task685(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
483   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
484   out_ = t[0];
485   in_ = in;
486   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
487   for (auto& c3 : *range[0])
488     for (auto& a4 : *range[2])
489       for (auto& c1 : *range[0])
490         for (auto& a2 : *range[2])
491           if (t[0]->is_local(a2, c1, a4, c3))
492             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
493 }
494 
Task686(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)495 Task686::Task686(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
496   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
497   out_ = t[0];
498   in_ = in;
499   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
500   for (auto& x2 : *range[1])
501     for (auto& x3 : *range[1])
502       for (auto& a2 : *range[2])
503         for (auto& c3 : *range[0])
504           if (t[0]->is_local(c3, a2, x3, x2))
505             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a2, x3, x2}}, in, t[0], range));
506 }
507 
Task687(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)508 Task687::Task687(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
509   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
510   out_ = t[0];
511   in_ = in;
512   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
513   for (auto& x0 : *range[1])
514     for (auto& x1 : *range[1])
515       for (auto& a2 : *range[2])
516         for (auto& c3 : *range[0])
517           if (t[0]->is_local(c3, a2, x1, x0))
518             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a2, x1, x0}}, in, t[0], range));
519 }
520 
Task688(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)521 Task688::Task688(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
522   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
523   out_ = t[0];
524   in_ = in;
525   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
526   for (auto& x2 : *range[1])
527     for (auto& x3 : *range[1])
528       for (auto& a2 : *range[2])
529         for (auto& c3 : *range[0])
530           if (t[0]->is_local(c3, a2, x3, x2))
531             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a2, x3, x2}}, in, t[0], range));
532 }
533 
Task689(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)534 Task689::Task689(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
535   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
536   out_ = t[0];
537   in_ = in;
538   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
539   for (auto& c3 : *range[0])
540     for (auto& a4 : *range[2])
541       for (auto& c1 : *range[0])
542         for (auto& a2 : *range[2])
543           if (t[0]->is_local(a2, c1, a4, c3))
544             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
545 }
546 
Task690(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)547 Task690::Task690(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
548   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
549   out_ = t[0];
550   in_ = in;
551   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
552   for (auto& x2 : *range[1])
553     for (auto& x3 : *range[1])
554       for (auto& a4 : *range[2])
555         for (auto& c3 : *range[0])
556           if (t[0]->is_local(c3, a4, x3, x2))
557             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, x3, x2}}, in, t[0], range));
558 }
559 
Task691(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)560 Task691::Task691(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
561   array<shared_ptr<const Tensor>,1> in = {{t[1]}};
562   out_ = t[0];
563   in_ = in;
564   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
565   for (auto& x0 : *range[1])
566     for (auto& x1 : *range[1])
567       for (auto& a4 : *range[2])
568         for (auto& c3 : *range[0])
569           if (t[0]->is_local(c3, a4, x1, x0))
570             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, x1, x0}}, in, t[0], range));
571 }
572 
Task692(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)573 Task692::Task692(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
574   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
575   out_ = t[0];
576   in_ = in;
577   subtasks_.reserve(range[1]->nblock()*range[1]->nblock()*range[2]->nblock()*range[0]->nblock());
578   for (auto& x2 : *range[1])
579     for (auto& x3 : *range[1])
580       for (auto& a4 : *range[2])
581         for (auto& c3 : *range[0])
582           if (t[0]->is_local(c3, a4, x3, x2))
583             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{c3, a4, x3, x2}}, in, t[0], range));
584 }
585 
Task693(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)586 Task693::Task693(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
587   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
588   out_ = t[0];
589   in_ = in;
590   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
591   for (auto& c3 : *range[0])
592     for (auto& a4 : *range[2])
593       for (auto& c1 : *range[0])
594         for (auto& a2 : *range[2])
595           if (t[0]->is_local(a2, c1, a4, c3))
596             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
597 }
598 
Task694(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)599 Task694::Task694(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
600   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
601   out_ = t[0];
602   in_ = in;
603   subtasks_.reserve(range[1]->nblock()*range[2]->nblock());
604   for (auto& x0 : *range[1])
605     for (auto& a4 : *range[2])
606       if (t[0]->is_local(a4, x0))
607         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a4, x0}}, in, t[0], range));
608 }
609 
Task695(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)610 Task695::Task695(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
611   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
612   out_ = t[0];
613   in_ = in;
614   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
615   for (auto& c3 : *range[0])
616     for (auto& a4 : *range[2])
617       for (auto& c1 : *range[0])
618         for (auto& a2 : *range[2])
619           if (t[0]->is_local(a2, c1, a4, c3))
620             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
621 }
622 
Task696(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)623 Task696::Task696(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
624   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
625   out_ = t[0];
626   in_ = in;
627   subtasks_.reserve(range[1]->nblock()*range[2]->nblock());
628   for (auto& x0 : *range[1])
629     for (auto& a2 : *range[2])
630       if (t[0]->is_local(a2, x0))
631         subtasks_.push_back(make_shared<Task_local>(array<const Index,2>{{a2, x0}}, in, t[0], range));
632 }
633 
Task697(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)634 Task697::Task697(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
635   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
636   out_ = t[0];
637   in_ = in;
638   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
639   for (auto& c3 : *range[0])
640     for (auto& a4 : *range[2])
641       for (auto& c1 : *range[0])
642         for (auto& a2 : *range[2])
643           if (t[0]->is_local(a2, c1, a4, c3))
644             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
645 }
646 
Task698(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)647 Task698::Task698(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
648   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
649   out_ = t[0];
650   in_ = in;
651   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
652   for (auto& c3 : *range[0])
653     for (auto& a4 : *range[2])
654       for (auto& c1 : *range[0])
655         for (auto& a2 : *range[2])
656           if (t[0]->is_local(a2, c1, a4, c3))
657             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
658 }
659 
Task699(vector<shared_ptr<Tensor>> t,array<shared_ptr<const IndexRange>,3> range)660 Task699::Task699(vector<shared_ptr<Tensor>> t, array<shared_ptr<const IndexRange>,3> range) {
661   array<shared_ptr<const Tensor>,2> in = {{t[1], t[2]}};
662   out_ = t[0];
663   in_ = in;
664   subtasks_.reserve(range[0]->nblock()*range[2]->nblock()*range[0]->nblock()*range[2]->nblock());
665   for (auto& c3 : *range[0])
666     for (auto& a4 : *range[2])
667       for (auto& c1 : *range[0])
668         for (auto& a2 : *range[2])
669           if (t[0]->is_local(a2, c1, a4, c3))
670             subtasks_.push_back(make_shared<Task_local>(array<const Index,4>{{a2, c1, a4, c3}}, in, t[0], range));
671 }
672 
673 #endif
674