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