1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: MSCASPT2_deci2q.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/caspt2/MSCASPT2.h>
30 #include <src/smith/caspt2/MSCASPT2_tasks.h>
31 
32 using namespace std;
33 using namespace bagel;
34 using namespace bagel::SMITH;
35 
make_deci2q(const bool reset,const bool diagonal)36 shared_ptr<Queue> MSCASPT2::MSCASPT2::make_deci2q(const bool reset, const bool diagonal) {
37 
38   array<shared_ptr<const IndexRange>,3> pindex = {{rclosed_, ractive_, rvirt_}};
39   auto deci2q = make_shared<Queue>();
40   auto tensor470 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci};
41   auto task470 = make_shared<Task470>(tensor470, reset);
42   deci2q->add_task(task470);
43 
44   vector<IndexRange> I703_index = {active_, active_, active_, active_};
45   auto I703 = make_shared<Tensor>(I703_index);
46   auto tensor472 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci, I703};
47   auto task472 = make_shared<Task472>(tensor472, pindex);
48   task472->add_dep(task470);
49   deci2q->add_task(task472);
50 
51   auto tensor473 = vector<shared_ptr<Tensor>>{I703, t2, l2};
52   auto task473 = make_shared<Task473>(tensor473, pindex, this->e0_);
53   task472->add_dep(task473);
54   task473->add_dep(task470);
55   deci2q->add_task(task473);
56 
57   vector<IndexRange> I706_index = {active_, active_, active_, active_, active_, active_};
58   auto I706 = make_shared<Tensor>(I706_index);
59   auto tensor474 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci, I706};
60   auto task474 = make_shared<Task474>(tensor474, pindex);
61   task474->add_dep(task470);
62   deci2q->add_task(task474);
63 
64   auto tensor475 = vector<shared_ptr<Tensor>>{I706, t2, l2};
65   auto task475 = make_shared<Task475>(tensor475, pindex, this->e0_);
66   task474->add_dep(task475);
67   task475->add_dep(task470);
68   deci2q->add_task(task475);
69 
70   vector<IndexRange> I709_index = {active_, active_};
71   auto I709 = make_shared<Tensor>(I709_index);
72   auto tensor476 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci, I709};
73   auto task476 = make_shared<Task476>(tensor476, pindex);
74   task476->add_dep(task470);
75   deci2q->add_task(task476);
76 
77   auto tensor477 = vector<shared_ptr<Tensor>>{I709, t2, l2};
78   auto task477 = make_shared<Task477>(tensor477, pindex, this->e0_);
79   task476->add_dep(task477);
80   task477->add_dep(task470);
81   deci2q->add_task(task477);
82 
83   auto tensor478 = vector<shared_ptr<Tensor>>{I709, t2, l2};
84   auto task478 = make_shared<Task478>(tensor478, pindex, this->e0_);
85   task476->add_dep(task478);
86   task478->add_dep(task470);
87   deci2q->add_task(task478);
88 
89   vector<IndexRange> I715_index = {active_, active_, active_, active_};
90   auto I715 = make_shared<Tensor>(I715_index);
91   auto tensor479 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci, I715};
92   auto task479 = make_shared<Task479>(tensor479, pindex);
93   task479->add_dep(task470);
94   deci2q->add_task(task479);
95 
96   auto tensor480 = vector<shared_ptr<Tensor>>{I715, t2, l2};
97   auto task480 = make_shared<Task480>(tensor480, pindex, this->e0_);
98   task479->add_dep(task480);
99   task480->add_dep(task470);
100   deci2q->add_task(task480);
101 
102   vector<IndexRange> I718_index = {active_, active_, active_, active_};
103   auto I718 = make_shared<Tensor>(I718_index);
104   auto tensor481 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci, I718};
105   auto task481 = make_shared<Task481>(tensor481, pindex);
106   task481->add_dep(task470);
107   deci2q->add_task(task481);
108 
109   auto tensor482 = vector<shared_ptr<Tensor>>{I718, t2, l2};
110   auto task482 = make_shared<Task482>(tensor482, pindex, this->e0_);
111   task481->add_dep(task482);
112   task482->add_dep(task470);
113   deci2q->add_task(task482);
114 
115   auto tensor483 = vector<shared_ptr<Tensor>>{I718, t2, l2};
116   auto task483 = make_shared<Task483>(tensor483, pindex, this->e0_);
117   task481->add_dep(task483);
118   task483->add_dep(task470);
119   deci2q->add_task(task483);
120 
121   auto tensor484 = vector<shared_ptr<Tensor>>{I718, t2, l2};
122   auto task484 = make_shared<Task484>(tensor484, pindex, this->e0_);
123   task481->add_dep(task484);
124   task484->add_dep(task470);
125   deci2q->add_task(task484);
126 
127   vector<IndexRange> I727_index = {active_, active_, active_, active_, active_, active_};
128   auto I727 = make_shared<Tensor>(I727_index);
129   auto tensor485 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci, I727};
130   auto task485 = make_shared<Task485>(tensor485, pindex);
131   task485->add_dep(task470);
132   deci2q->add_task(task485);
133 
134   auto tensor486 = vector<shared_ptr<Tensor>>{I727, t2, l2};
135   auto task486 = make_shared<Task486>(tensor486, pindex, this->e0_);
136   task485->add_dep(task486);
137   task486->add_dep(task470);
138   deci2q->add_task(task486);
139 
140   shared_ptr<Tensor> I730;
141   if (diagonal) {
142     vector<IndexRange> I730_index;
143     I730 = make_shared<Tensor>(I730_index);
144   }
145   shared_ptr<Task487> task487;
146   if (diagonal) {
147     auto tensor487 = vector<shared_ptr<Tensor>>{den0ci, I730};
148     task487 = make_shared<Task487>(tensor487, pindex);
149     task487->add_dep(task470);
150     deci2q->add_task(task487);
151   }
152 
153   shared_ptr<Task488> task488;
154   if (diagonal) {
155     auto tensor488 = vector<shared_ptr<Tensor>>{I730, t2, l2};
156     task488 = make_shared<Task488>(tensor488, pindex, this->e0_);
157     task487->add_dep(task488);
158     task488->add_dep(task470);
159     deci2q->add_task(task488);
160   }
161 
162   shared_ptr<Tensor> I733;
163   if (diagonal) {
164     vector<IndexRange> I733_index;
165     I733 = make_shared<Tensor>(I733_index);
166   }
167   shared_ptr<Task489> task489;
168   if (diagonal) {
169     auto tensor489 = vector<shared_ptr<Tensor>>{den0ci, I733};
170     task489 = make_shared<Task489>(tensor489, pindex);
171     task489->add_dep(task470);
172     deci2q->add_task(task489);
173   }
174 
175   shared_ptr<Task490> task490;
176   if (diagonal) {
177     auto tensor490 = vector<shared_ptr<Tensor>>{I733, t2, l2};
178     task490 = make_shared<Task490>(tensor490, pindex, this->e0_);
179     task489->add_dep(task490);
180     task490->add_dep(task470);
181     deci2q->add_task(task490);
182   }
183 
184   vector<IndexRange> I736_index = {active_, active_};
185   auto I736 = make_shared<Tensor>(I736_index);
186   auto tensor491 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci, I736};
187   auto task491 = make_shared<Task491>(tensor491, pindex);
188   task491->add_dep(task470);
189   deci2q->add_task(task491);
190 
191   auto tensor492 = vector<shared_ptr<Tensor>>{I736, t2, l2};
192   auto task492 = make_shared<Task492>(tensor492, pindex, this->e0_);
193   task491->add_dep(task492);
194   task492->add_dep(task470);
195   deci2q->add_task(task492);
196 
197   auto tensor493 = vector<shared_ptr<Tensor>>{I736, t2, l2};
198   auto task493 = make_shared<Task493>(tensor493, pindex, this->e0_);
199   task491->add_dep(task493);
200   task493->add_dep(task470);
201   deci2q->add_task(task493);
202 
203   vector<IndexRange> I742_index = {active_, active_, active_, active_};
204   auto I742 = make_shared<Tensor>(I742_index);
205   auto tensor494 = vector<shared_ptr<Tensor>>{den0ci, den1ci, den2ci, den3ci, den4ci, I742};
206   auto task494 = make_shared<Task494>(tensor494, pindex);
207   task494->add_dep(task470);
208   deci2q->add_task(task494);
209 
210   auto tensor495 = vector<shared_ptr<Tensor>>{I742, t2, l2};
211   auto task495 = make_shared<Task495>(tensor495, pindex, this->e0_);
212   task494->add_dep(task495);
213   task495->add_dep(task470);
214   deci2q->add_task(task495);
215 
216   return deci2q;
217 }
218 
219 
220 #endif
221