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