1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: MRCI_residualqq.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/mrci/MRCI.h>
30 #include <src/smith/mrci/MRCI_tasks3.h>
31 
32 using namespace std;
33 using namespace bagel;
34 using namespace bagel::SMITH;
35 
make_residualq(const bool reset,const bool diagonal)36 shared_ptr<Queue> MRCI::MRCI::make_residualq(const bool reset, const bool diagonal) {
37   auto out = make_shared<Queue>();
38   auto tensor108 = vector<shared_ptr<Tensor>>{r};
39   auto task108 = make_shared<Task108>(tensor108, reset);
40   out->add_task(task108);
41 
42   make_residualq1(out, task108, diagonal);
43   make_residualq2(out, task108, diagonal);
44   make_residualq3(out, task108, diagonal);
45   make_residualq4(out, task108, diagonal);
46   make_residualq5(out, task108, diagonal);
47   make_residualq6(out, task108, diagonal);
48   make_residualq7(out, task108, diagonal);
49   make_residualq8(out, task108, diagonal);
50   make_residualq9(out, task108, diagonal);
51   return out;
52 }
53 
54 
make_residualq1(shared_ptr<Queue> residualq,shared_ptr<Task> task108,const bool diagonal)55 void MRCI::MRCI::make_residualq1(shared_ptr<Queue> residualq, shared_ptr<Task> task108, const bool diagonal) {
56   array<shared_ptr<const IndexRange>,3> pindex = {{rclosed_, ractive_, rvirt_}};
57 
58   vector<IndexRange> I0_index = {closed_, closed_, active_, active_};
59   auto I0 = make_shared<Tensor>(I0_index);
60   auto tensor109 = vector<shared_ptr<Tensor>>{r, I0};
61   auto task109 = make_shared<Task109>(tensor109, pindex);
62   task109->add_dep(task108);
63   residualq->add_task(task109);
64 
65   vector<IndexRange> I1_index = {closed_, closed_, active_, active_};
66   auto I1 = make_shared<Tensor>(I1_index);
67   auto tensor110 = vector<shared_ptr<Tensor>>{I0, Gamma0_(), I1};
68   auto task110 = make_shared<Task110>(tensor110, pindex);
69   task109->add_dep(task110);
70   task110->add_dep(task108);
71   residualq->add_task(task110);
72 
73   auto tensor111 = vector<shared_ptr<Tensor>>{I1, t2, h1_};
74   auto task111 = make_shared<Task111>(tensor111, pindex);
75   task110->add_dep(task111);
76   task111->add_dep(task108);
77   residualq->add_task(task111);
78 
79   vector<IndexRange> I280_index = {virt_, active_, closed_, closed_};
80   auto I280 = make_shared<Tensor>(I280_index);
81   auto tensor112 = vector<shared_ptr<Tensor>>{I1, t2, I280};
82   auto task112 = make_shared<Task112>(tensor112, pindex);
83   task110->add_dep(task112);
84   task112->add_dep(task108);
85   residualq->add_task(task112);
86 
87   auto tensor113 = vector<shared_ptr<Tensor>>{I280, v2_};
88   auto task113 = make_shared<Task113>(tensor113, pindex);
89   task112->add_dep(task113);
90   task113->add_dep(task108);
91   residualq->add_task(task113);
92 
93   auto tensor114 = vector<shared_ptr<Tensor>>{I1, t2, v2_};
94   auto task114 = make_shared<Task114>(tensor114, pindex);
95   task110->add_dep(task114);
96   task114->add_dep(task108);
97   residualq->add_task(task114);
98 
99   vector<IndexRange> I4_index = {closed_, active_, active_, active_};
100   auto I4 = make_shared<Tensor>(I4_index);
101   auto tensor115 = vector<shared_ptr<Tensor>>{I0, h1_, I4};
102   auto task115 = make_shared<Task115>(tensor115, pindex);
103   task109->add_dep(task115);
104   task115->add_dep(task108);
105   residualq->add_task(task115);
106 
107   auto tensor116 = vector<shared_ptr<Tensor>>{I4, Gamma1_(), t2};
108   auto task116 = make_shared<Task116>(tensor116, pindex);
109   task115->add_dep(task116);
110   task116->add_dep(task108);
111   residualq->add_task(task116);
112 
113   vector<IndexRange> I7_index = {active_, closed_, closed_, active_};
114   auto I7 = make_shared<Tensor>(I7_index);
115   auto tensor117 = vector<shared_ptr<Tensor>>{I0, Gamma2_(), I7};
116   auto task117 = make_shared<Task117>(tensor117, pindex);
117   task109->add_dep(task117);
118   task117->add_dep(task108);
119   residualq->add_task(task117);
120 
121   auto tensor118 = vector<shared_ptr<Tensor>>{I7, t2, h1_};
122   auto task118 = make_shared<Task118>(tensor118, pindex);
123   task117->add_dep(task118);
124   task118->add_dep(task108);
125   residualq->add_task(task118);
126 
127   auto tensor119 = vector<shared_ptr<Tensor>>{I7, t2, v2_};
128   auto task119 = make_shared<Task119>(tensor119, pindex);
129   task117->add_dep(task119);
130   task119->add_dep(task108);
131   residualq->add_task(task119);
132 
133   vector<IndexRange> I249_index = {closed_, active_, active_, closed_, active_, active_};
134   auto I249 = make_shared<Tensor>(I249_index);
135   auto tensor120 = vector<shared_ptr<Tensor>>{I0, Gamma80_(), I249};
136   auto task120 = make_shared<Task120>(tensor120, pindex);
137   task109->add_dep(task120);
138   task120->add_dep(task108);
139   residualq->add_task(task120);
140 
141   vector<IndexRange> I250_index = {closed_, closed_, active_, active_};
142   auto I250 = make_shared<Tensor>(I250_index);
143   auto tensor121 = vector<shared_ptr<Tensor>>{I249, t2, I250};
144   auto task121 = make_shared<Task121>(tensor121, pindex);
145   task120->add_dep(task121);
146   task121->add_dep(task108);
147   residualq->add_task(task121);
148 
149   auto tensor122 = vector<shared_ptr<Tensor>>{I250, v2_};
150   auto task122 = make_shared<Task122>(tensor122, pindex);
151   task121->add_dep(task122);
152   task122->add_dep(task108);
153   residualq->add_task(task122);
154 
155   vector<IndexRange> I252_index = {closed_, active_, active_, closed_, active_, active_};
156   auto I252 = make_shared<Tensor>(I252_index);
157   auto tensor123 = vector<shared_ptr<Tensor>>{I0, Gamma81_(), I252};
158   auto task123 = make_shared<Task123>(tensor123, pindex);
159   task109->add_dep(task123);
160   task123->add_dep(task108);
161   residualq->add_task(task123);
162 
163   auto tensor124 = vector<shared_ptr<Tensor>>{I252, t2, v2_};
164   auto task124 = make_shared<Task124>(tensor124, pindex);
165   task123->add_dep(task124);
166   task124->add_dep(task108);
167   residualq->add_task(task124);
168 
169   vector<IndexRange> I255_index = {active_, closed_, active_, closed_, active_, active_};
170   auto I255 = make_shared<Tensor>(I255_index);
171   auto tensor125 = vector<shared_ptr<Tensor>>{I0, Gamma82_(), I255};
172   auto task125 = make_shared<Task125>(tensor125, pindex);
173   task109->add_dep(task125);
174   task125->add_dep(task108);
175   residualq->add_task(task125);
176 
177   auto tensor126 = vector<shared_ptr<Tensor>>{I255, t2, v2_};
178   auto task126 = make_shared<Task126>(tensor126, pindex);
179   task125->add_dep(task126);
180   task126->add_dep(task108);
181   residualq->add_task(task126);
182 
183   vector<IndexRange> I264_index = {closed_, active_, active_, active_, active_, active_};
184   auto I264 = make_shared<Tensor>(I264_index);
185   auto tensor127 = vector<shared_ptr<Tensor>>{I0, t2, I264};
186   auto task127 = make_shared<Task127>(tensor127, pindex);
187   task109->add_dep(task127);
188   task127->add_dep(task108);
189   residualq->add_task(task127);
190 
191   auto tensor128 = vector<shared_ptr<Tensor>>{I264, Gamma85_(), v2_};
192   auto task128 = make_shared<Task128>(tensor128, pindex);
193   task127->add_dep(task128);
194   task128->add_dep(task108);
195   residualq->add_task(task128);
196 
197   auto tensor129 = vector<shared_ptr<Tensor>>{I264, Gamma86_(), v2_};
198   auto task129 = make_shared<Task129>(tensor129, pindex);
199   task127->add_dep(task129);
200   task129->add_dep(task108);
201   residualq->add_task(task129);
202 
203   vector<IndexRange> I270_index = {closed_, active_, active_, active_};
204   auto I270 = make_shared<Tensor>(I270_index);
205   auto tensor130 = vector<shared_ptr<Tensor>>{I0, v2_, I270};
206   auto task130 = make_shared<Task130>(tensor130, pindex);
207   task109->add_dep(task130);
208   task130->add_dep(task108);
209   residualq->add_task(task130);
210 
211   auto tensor131 = vector<shared_ptr<Tensor>>{I270, Gamma87_(), t2};
212   auto task131 = make_shared<Task131>(tensor131, pindex);
213   task130->add_dep(task131);
214   task131->add_dep(task108);
215   residualq->add_task(task131);
216 
217   vector<IndexRange> I273_index = {virt_, active_, active_, active_};
218   auto I273 = make_shared<Tensor>(I273_index);
219   auto tensor132 = vector<shared_ptr<Tensor>>{I0, t2, I273};
220   auto task132 = make_shared<Task132>(tensor132, pindex);
221   task109->add_dep(task132);
222   task132->add_dep(task108);
223   residualq->add_task(task132);
224 
225   auto tensor133 = vector<shared_ptr<Tensor>>{I273, Gamma88_(), v2_};
226   auto task133 = make_shared<Task133>(tensor133, pindex);
227   task132->add_dep(task133);
228   task133->add_dep(task108);
229   residualq->add_task(task133);
230 
231   auto tensor134 = vector<shared_ptr<Tensor>>{I273, Gamma89_(), v2_};
232   auto task134 = make_shared<Task134>(tensor134, pindex);
233   task132->add_dep(task134);
234   task134->add_dep(task108);
235   residualq->add_task(task134);
236 
237   vector<IndexRange> I291_index = {closed_, active_, active_, active_, closed_, active_};
238   auto I291 = make_shared<Tensor>(I291_index);
239   auto tensor135 = vector<shared_ptr<Tensor>>{I0, Gamma94_(), I291};
240   auto task135 = make_shared<Task135>(tensor135, pindex);
241   task109->add_dep(task135);
242   task135->add_dep(task108);
243   residualq->add_task(task135);
244 
245   auto tensor136 = vector<shared_ptr<Tensor>>{I291, t2, v2_};
246   auto task136 = make_shared<Task136>(tensor136, pindex);
247   task135->add_dep(task136);
248   task136->add_dep(task108);
249   residualq->add_task(task136);
250 
251   vector<IndexRange> I294_index = {closed_, active_, active_, closed_, active_, active_};
252   auto I294 = make_shared<Tensor>(I294_index);
253   auto tensor137 = vector<shared_ptr<Tensor>>{I0, Gamma87_(), I294};
254   auto task137 = make_shared<Task137>(tensor137, pindex);
255   task109->add_dep(task137);
256   task137->add_dep(task108);
257   residualq->add_task(task137);
258 
259   auto tensor138 = vector<shared_ptr<Tensor>>{I294, t2, v2_};
260   auto task138 = make_shared<Task138>(tensor138, pindex);
261   task137->add_dep(task138);
262   task138->add_dep(task108);
263   residualq->add_task(task138);
264 }
265 
266 #endif
267