1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: RelMRCI_residualq6.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 
29 #include <src/smith/relmrci/RelMRCI.h>
30 #include <src/smith/relmrci/RelMRCI_tasks14.h>
31 #include <src/smith/relmrci/RelMRCI_tasks15.h>
32 
33 using namespace std;
34 using namespace bagel;
35 using namespace bagel::SMITH;
36 
make_residualq6(shared_ptr<Queue> residualq,shared_ptr<Task> task83,const bool diagonal)37 void RelMRCI::RelMRCI::make_residualq6(shared_ptr<Queue> residualq, shared_ptr<Task> task83, const bool diagonal) {
38   array<shared_ptr<const IndexRange>,3> pindex = {{rclosed_, ractive_, rvirt_}};
39 
40   vector<IndexRange> I173_index = {virt_, active_, active_, virt_};
41   auto I173 = make_shared<Tensor>(I173_index);
42   auto tensor675 = vector<shared_ptr<Tensor>>{r, I173};
43   auto task675 = make_shared<Task675>(tensor675, pindex);
44   task675->add_dep(task83);
45   residualq->add_task(task675);
46 
47   vector<IndexRange> I174_index = {virt_, active_, active_, active_};
48   auto I174 = make_shared<Tensor>(I174_index);
49   auto tensor676 = vector<shared_ptr<Tensor>>{I173, h1_, I174};
50   auto task676 = make_shared<Task676>(tensor676, pindex);
51   task675->add_dep(task676);
52   task676->add_dep(task83);
53   residualq->add_task(task676);
54 
55   auto tensor677 = vector<shared_ptr<Tensor>>{I174, Gamma32_(), t2};
56   auto task677 = make_shared<Task677>(tensor677, pindex);
57   task676->add_dep(task677);
58   task677->add_dep(task83);
59   residualq->add_task(task677);
60 
61   vector<IndexRange> I177_index = {active_, active_, virt_, virt_};
62   auto I177 = make_shared<Tensor>(I177_index);
63   auto tensor678 = vector<shared_ptr<Tensor>>{I173, Gamma33_(), I177};
64   auto task678 = make_shared<Task678>(tensor678, pindex);
65   task675->add_dep(task678);
66   task678->add_dep(task83);
67   residualq->add_task(task678);
68 
69   auto tensor679 = vector<shared_ptr<Tensor>>{I177, t2, h1_};
70   auto task679 = make_shared<Task679>(tensor679, pindex);
71   task678->add_dep(task679);
72   task679->add_dep(task83);
73   residualq->add_task(task679);
74 
75   auto tensor680 = vector<shared_ptr<Tensor>>{I177, t2, h1_};
76   auto task680 = make_shared<Task680>(tensor680, pindex);
77   task678->add_dep(task680);
78   task680->add_dep(task83);
79   residualq->add_task(task680);
80 
81   auto tensor681 = vector<shared_ptr<Tensor>>{I177, t2, v2_};
82   auto task681 = make_shared<Task681>(tensor681, pindex);
83   task678->add_dep(task681);
84   task681->add_dep(task83);
85   residualq->add_task(task681);
86 
87   auto tensor682 = vector<shared_ptr<Tensor>>{I177, t2, v2_};
88   auto task682 = make_shared<Task682>(tensor682, pindex);
89   task678->add_dep(task682);
90   task682->add_dep(task83);
91   residualq->add_task(task682);
92 
93   auto tensor683 = vector<shared_ptr<Tensor>>{I177, t2, v2_};
94   auto task683 = make_shared<Task683>(tensor683, pindex);
95   task678->add_dep(task683);
96   task683->add_dep(task83);
97   residualq->add_task(task683);
98 
99   vector<IndexRange> I1217_index = {virt_, closed_, active_, active_, active_, active_};
100   auto I1217 = make_shared<Tensor>(I1217_index);
101   auto tensor684 = vector<shared_ptr<Tensor>>{I173, t2, I1217};
102   auto task684 = make_shared<Task684>(tensor684, pindex);
103   task675->add_dep(task684);
104   task684->add_dep(task83);
105   residualq->add_task(task684);
106 
107   auto tensor685 = vector<shared_ptr<Tensor>>{I1217, Gamma396_(), v2_};
108   auto task685 = make_shared<Task685>(tensor685, pindex);
109   task684->add_dep(task685);
110   task685->add_dep(task83);
111   residualq->add_task(task685);
112 
113   vector<IndexRange> I1220_index = {virt_, active_, active_, active_, active_, active_};
114   auto I1220 = make_shared<Tensor>(I1220_index);
115   auto tensor686 = vector<shared_ptr<Tensor>>{I173, t2, I1220};
116   auto task686 = make_shared<Task686>(tensor686, pindex);
117   task675->add_dep(task686);
118   task686->add_dep(task83);
119   residualq->add_task(task686);
120 
121   auto tensor687 = vector<shared_ptr<Tensor>>{I1220, Gamma397_(), v2_};
122   auto task687 = make_shared<Task687>(tensor687, pindex);
123   task686->add_dep(task687);
124   task687->add_dep(task83);
125   residualq->add_task(task687);
126 
127   auto tensor688 = vector<shared_ptr<Tensor>>{I1220, Gamma236_(), v2_};
128   auto task688 = make_shared<Task688>(tensor688, pindex);
129   task686->add_dep(task688);
130   task688->add_dep(task83);
131   residualq->add_task(task688);
132 
133   vector<IndexRange> I1226_index = {virt_, active_, active_, active_};
134   auto I1226 = make_shared<Tensor>(I1226_index);
135   auto tensor689 = vector<shared_ptr<Tensor>>{I173, v2_, I1226};
136   auto task689 = make_shared<Task689>(tensor689, pindex);
137   task675->add_dep(task689);
138   task689->add_dep(task83);
139   residualq->add_task(task689);
140 
141   auto tensor690 = vector<shared_ptr<Tensor>>{I1226, Gamma336_(), t2};
142   auto task690 = make_shared<Task690>(tensor690, pindex);
143   task689->add_dep(task690);
144   task690->add_dep(task83);
145   residualq->add_task(task690);
146 
147   vector<IndexRange> I1232_index = {closed_, active_, active_, active_};
148   auto I1232 = make_shared<Tensor>(I1232_index);
149   auto tensor691 = vector<shared_ptr<Tensor>>{I173, t2, I1232};
150   auto task691 = make_shared<Task691>(tensor691, pindex);
151   task675->add_dep(task691);
152   task691->add_dep(task83);
153   residualq->add_task(task691);
154 
155   auto tensor692 = vector<shared_ptr<Tensor>>{I1232, Gamma391_(), v2_};
156   auto task692 = make_shared<Task692>(tensor692, pindex);
157   task691->add_dep(task692);
158   task692->add_dep(task83);
159   residualq->add_task(task692);
160 
161   auto tensor693 = vector<shared_ptr<Tensor>>{I1232, Gamma32_(), v2_};
162   auto task693 = make_shared<Task693>(tensor693, pindex);
163   task691->add_dep(task693);
164   task693->add_dep(task83);
165   residualq->add_task(task693);
166 
167   vector<IndexRange> I1238_index = {active_, virt_, active_, virt_};
168   auto I1238 = make_shared<Tensor>(I1238_index);
169   auto tensor694 = vector<shared_ptr<Tensor>>{I173, Gamma368_(), I1238};
170   auto task694 = make_shared<Task694>(tensor694, pindex);
171   task675->add_dep(task694);
172   task694->add_dep(task83);
173   residualq->add_task(task694);
174 
175   auto tensor695 = vector<shared_ptr<Tensor>>{I1238, t2, v2_};
176   auto task695 = make_shared<Task695>(tensor695, pindex);
177   task694->add_dep(task695);
178   task695->add_dep(task83);
179   residualq->add_task(task695);
180 
181   vector<IndexRange> I1250_index = {virt_, active_, active_, active_, virt_, active_};
182   auto I1250 = make_shared<Tensor>(I1250_index);
183   auto tensor696 = vector<shared_ptr<Tensor>>{I173, Gamma391_(), I1250};
184   auto task696 = make_shared<Task696>(tensor696, pindex);
185   task675->add_dep(task696);
186   task696->add_dep(task83);
187   residualq->add_task(task696);
188 
189   vector<IndexRange> I1251_index = {virt_, virt_, active_, active_};
190   auto I1251 = make_shared<Tensor>(I1251_index);
191   auto tensor697 = vector<shared_ptr<Tensor>>{I1250, t2, I1251};
192   auto task697 = make_shared<Task697>(tensor697, pindex);
193   task696->add_dep(task697);
194   task697->add_dep(task83);
195   residualq->add_task(task697);
196 
197   auto tensor698 = vector<shared_ptr<Tensor>>{I1251, v2_};
198   auto task698 = make_shared<Task698>(tensor698, pindex);
199   task697->add_dep(task698);
200   task698->add_dep(task83);
201   residualq->add_task(task698);
202 
203   vector<IndexRange> I1253_index = {active_, active_, virt_, active_, virt_, active_};
204   auto I1253 = make_shared<Tensor>(I1253_index);
205   auto tensor699 = vector<shared_ptr<Tensor>>{I173, Gamma32_(), I1253};
206   auto task699 = make_shared<Task699>(tensor699, pindex);
207   task675->add_dep(task699);
208   task699->add_dep(task83);
209   residualq->add_task(task699);
210 
211   auto tensor700 = vector<shared_ptr<Tensor>>{I1253, t2, v2_};
212   auto task700 = make_shared<Task700>(tensor700, pindex);
213   task699->add_dep(task700);
214   task700->add_dep(task83);
215   residualq->add_task(task700);
216 
217   vector<IndexRange> I1256_index = {active_, virt_, active_, active_, virt_, active_};
218   auto I1256 = make_shared<Tensor>(I1256_index);
219   auto tensor701 = vector<shared_ptr<Tensor>>{I173, Gamma409_(), I1256};
220   auto task701 = make_shared<Task701>(tensor701, pindex);
221   task675->add_dep(task701);
222   task701->add_dep(task83);
223   residualq->add_task(task701);
224 
225   auto tensor702 = vector<shared_ptr<Tensor>>{I1256, t2, v2_};
226   auto task702 = make_shared<Task702>(tensor702, pindex);
227   task701->add_dep(task702);
228   task702->add_dep(task83);
229   residualq->add_task(task702);
230 
231   vector<IndexRange> I194_index = {closed_, closed_, active_, active_};
232   auto I194 = make_shared<Tensor>(I194_index);
233   auto tensor703 = vector<shared_ptr<Tensor>>{r, I194};
234   auto task703 = make_shared<Task703>(tensor703, pindex);
235   task703->add_dep(task83);
236   residualq->add_task(task703);
237 
238   vector<IndexRange> I195_index = {closed_, closed_, active_, active_};
239   auto I195 = make_shared<Tensor>(I195_index);
240   auto tensor704 = vector<shared_ptr<Tensor>>{I194, Gamma2_(), I195};
241   auto task704 = make_shared<Task704>(tensor704, pindex);
242   task703->add_dep(task704);
243   task704->add_dep(task83);
244   residualq->add_task(task704);
245 
246   auto tensor705 = vector<shared_ptr<Tensor>>{I195, t2, v2_};
247   auto task705 = make_shared<Task705>(tensor705, pindex);
248   task704->add_dep(task705);
249   task705->add_dep(task83);
250   residualq->add_task(task705);
251 
252   auto tensor706 = vector<shared_ptr<Tensor>>{I195, t2, v2_};
253   auto task706 = make_shared<Task706>(tensor706, pindex);
254   task704->add_dep(task706);
255   task706->add_dep(task83);
256   residualq->add_task(task706);
257 
258   auto tensor707 = vector<shared_ptr<Tensor>>{I194, Gamma412_(), t2};
259   auto task707 = make_shared<Task707>(tensor707, pindex);
260   task703->add_dep(task707);
261   task707->add_dep(task83);
262   residualq->add_task(task707);
263 
264   auto tensor708 = vector<shared_ptr<Tensor>>{I194, Gamma413_(), t2};
265   auto task708 = make_shared<Task708>(tensor708, pindex);
266   task703->add_dep(task708);
267   task708->add_dep(task83);
268   residualq->add_task(task708);
269 
270   vector<IndexRange> I773_index = {closed_, closed_, virt_, virt_};
271   auto I773 = make_shared<Tensor>(I773_index);
272   auto tensor709 = vector<shared_ptr<Tensor>>{r, I773};
273   auto task709 = make_shared<Task709>(tensor709, pindex);
274   task709->add_dep(task83);
275   residualq->add_task(task709);
276 
277   vector<IndexRange> I774_index = {closed_, closed_, active_, active_};
278   auto I774 = make_shared<Tensor>(I774_index);
279   auto tensor710 = vector<shared_ptr<Tensor>>{I773, v2_, I774};
280   auto task710 = make_shared<Task710>(tensor710, pindex);
281   task709->add_dep(task710);
282   task710->add_dep(task83);
283   residualq->add_task(task710);
284 
285   auto tensor711 = vector<shared_ptr<Tensor>>{I774, Gamma2_(), t2};
286   auto task711 = make_shared<Task711>(tensor711, pindex);
287   task710->add_dep(task711);
288   task711->add_dep(task83);
289   residualq->add_task(task711);
290 
291   shared_ptr<Task712> task712;
292   if (diagonal) {
293     auto tensor712 = vector<shared_ptr<Tensor>>{I773, t2, v2_};
294     task712 = make_shared<Task712>(tensor712, pindex);
295     task709->add_dep(task712);
296     task712->add_dep(task83);
297     residualq->add_task(task712);
298   }
299 
300   shared_ptr<Task713> task713;
301   if (diagonal) {
302     auto tensor713 = vector<shared_ptr<Tensor>>{I773, t2, v2_};
303     task713 = make_shared<Task713>(tensor713, pindex);
304     task709->add_dep(task713);
305     task713->add_dep(task83);
306     residualq->add_task(task713);
307   }
308 
309   vector<IndexRange> I977_index = {closed_, closed_, active_, active_};
310   auto I977 = make_shared<Tensor>(I977_index);
311   auto tensor714 = vector<shared_ptr<Tensor>>{I773, t2, I977};
312   auto task714 = make_shared<Task714>(tensor714, pindex);
313   task709->add_dep(task714);
314   task714->add_dep(task83);
315   residualq->add_task(task714);
316 
317   auto tensor715 = vector<shared_ptr<Tensor>>{I977, Gamma368_(), v2_};
318   auto task715 = make_shared<Task715>(tensor715, pindex);
319   task714->add_dep(task715);
320   task715->add_dep(task83);
321   residualq->add_task(task715);
322 
323   vector<IndexRange> I1289_index = {closed_, virt_, closed_, virt_};
324   auto I1289 = make_shared<Tensor>(I1289_index);
325   auto tensor716 = vector<shared_ptr<Tensor>>{I773, Gamma424_(), I1289};
326   auto task716 = make_shared<Task716>(tensor716, pindex);
327   task709->add_dep(task716);
328   task716->add_dep(task83);
329   residualq->add_task(task716);
330 
331   auto tensor717 = vector<shared_ptr<Tensor>>{I1289, t2};
332   auto task717 = make_shared<Task717>(tensor717, pindex);
333   task716->add_dep(task717);
334   task717->add_dep(task83);
335   residualq->add_task(task717);
336 
337   vector<IndexRange> I1293_index = {closed_, virt_, closed_, virt_};
338   auto I1293 = make_shared<Tensor>(I1293_index);
339   auto tensor718 = vector<shared_ptr<Tensor>>{I773, Gamma426_(), I1293};
340   auto task718 = make_shared<Task718>(tensor718, pindex);
341   task709->add_dep(task718);
342   task718->add_dep(task83);
343   residualq->add_task(task718);
344 
345   auto tensor719 = vector<shared_ptr<Tensor>>{I1293, t2};
346   auto task719 = make_shared<Task719>(tensor719, pindex);
347   task718->add_dep(task719);
348   task719->add_dep(task83);
349   residualq->add_task(task719);
350 
351   vector<IndexRange> I1228_index = {active_, active_, virt_, virt_};
352   auto I1228 = make_shared<Tensor>(I1228_index);
353   auto tensor720 = vector<shared_ptr<Tensor>>{r, I1228};
354   auto task720 = make_shared<Task720>(tensor720, pindex);
355   task720->add_dep(task83);
356   residualq->add_task(task720);
357 
358   vector<IndexRange> I1229_index = {closed_, closed_, active_, active_};
359   auto I1229 = make_shared<Tensor>(I1229_index);
360   auto tensor721 = vector<shared_ptr<Tensor>>{I1228, t2, I1229};
361   auto task721 = make_shared<Task721>(tensor721, pindex);
362   task720->add_dep(task721);
363   task721->add_dep(task83);
364   residualq->add_task(task721);
365 
366   auto tensor722 = vector<shared_ptr<Tensor>>{I1229, Gamma368_(), v2_};
367   auto task722 = make_shared<Task722>(tensor722, pindex);
368   task721->add_dep(task722);
369   task722->add_dep(task83);
370   residualq->add_task(task722);
371 
372   vector<IndexRange> I1262_index = {virt_, virt_, active_, active_};
373   auto I1262 = make_shared<Tensor>(I1262_index);
374   auto tensor723 = vector<shared_ptr<Tensor>>{I1228, Gamma368_(), I1262};
375   auto task723 = make_shared<Task723>(tensor723, pindex);
376   task720->add_dep(task723);
377   task723->add_dep(task83);
378   residualq->add_task(task723);
379 
380   auto tensor724 = vector<shared_ptr<Tensor>>{I1262, t2, v2_};
381   auto task724 = make_shared<Task724>(tensor724, pindex);
382   task723->add_dep(task724);
383   task724->add_dep(task83);
384   residualq->add_task(task724);
385 
386   auto tensor725 = vector<shared_ptr<Tensor>>{I1228, Gamma432_(), t2};
387   auto task725 = make_shared<Task725>(tensor725, pindex);
388   task720->add_dep(task725);
389   task725->add_dep(task83);
390   residualq->add_task(task725);
391 
392   auto tensor726 = vector<shared_ptr<Tensor>>{I1228, Gamma433_(), t2};
393   auto task726 = make_shared<Task726>(tensor726, pindex);
394   task720->add_dep(task726);
395   task726->add_dep(task83);
396   residualq->add_task(task726);
397 }
398 
399 #endif
400