1 //
2 // BAGEL - Brilliantly Advanced General Electronic Structure Library
3 // Filename: CASA_sourceqq.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/casa/CASA.h>
30 #include <src/smith/casa/CASA_tasks.h>
31
32 using namespace std;
33 using namespace bagel;
34 using namespace bagel::SMITH;
35
make_sourceq(const bool reset,const bool diagonal)36 shared_ptr<Queue> CASA::CASA::make_sourceq(const bool reset, const bool diagonal) {
37
38 array<shared_ptr<const IndexRange>,3> pindex = {{rclosed_, ractive_, rvirt_}};
39 auto sourceq = make_shared<Queue>();
40 auto tensor235 = vector<shared_ptr<Tensor>>{s};
41 auto task235 = make_shared<Task235>(tensor235, reset);
42 sourceq->add_task(task235);
43
44 vector<IndexRange> I330_index = {closed_, closed_, active_, active_};
45 auto I330 = make_shared<Tensor>(I330_index);
46 auto tensor236 = vector<shared_ptr<Tensor>>{s, I330};
47 auto task236 = make_shared<Task236>(tensor236, pindex);
48 task236->add_dep(task235);
49 sourceq->add_task(task236);
50
51 auto tensor237 = vector<shared_ptr<Tensor>>{I330, Gamma0_(), v2_};
52 auto task237 = make_shared<Task237>(tensor237, pindex);
53 task236->add_dep(task237);
54 task237->add_dep(task235);
55 sourceq->add_task(task237);
56
57 vector<IndexRange> I332_index = {closed_, active_, active_, active_};
58 auto I332 = make_shared<Tensor>(I332_index);
59 auto tensor238 = vector<shared_ptr<Tensor>>{s, I332};
60 auto task238 = make_shared<Task238>(tensor238, pindex);
61 task238->add_dep(task235);
62 sourceq->add_task(task238);
63
64 auto tensor239 = vector<shared_ptr<Tensor>>{I332, Gamma121_(), v2_};
65 auto task239 = make_shared<Task239>(tensor239, pindex);
66 task238->add_dep(task239);
67 task239->add_dep(task235);
68 sourceq->add_task(task239);
69
70 auto tensor240 = vector<shared_ptr<Tensor>>{I332, Gamma3_(), v2_};
71 auto task240 = make_shared<Task240>(tensor240, pindex);
72 task238->add_dep(task240);
73 task240->add_dep(task235);
74 sourceq->add_task(task240);
75
76 auto tensor241 = vector<shared_ptr<Tensor>>{I332, Gamma5_(), h1_};
77 auto task241 = make_shared<Task241>(tensor241, pindex);
78 task238->add_dep(task241);
79 task241->add_dep(task235);
80 sourceq->add_task(task241);
81
82 vector<IndexRange> I336_index = {closed_, closed_, virt_, active_};
83 auto I336 = make_shared<Tensor>(I336_index);
84 auto tensor242 = vector<shared_ptr<Tensor>>{s, I336};
85 auto task242 = make_shared<Task242>(tensor242, pindex);
86 task242->add_dep(task235);
87 sourceq->add_task(task242);
88
89 vector<IndexRange> I337_index = {closed_, active_, closed_, virt_};
90 auto I337 = make_shared<Tensor>(I337_index);
91 auto tensor243 = vector<shared_ptr<Tensor>>{I336, Gamma9_(), I337};
92 auto task243 = make_shared<Task243>(tensor243, pindex);
93 task242->add_dep(task243);
94 task243->add_dep(task235);
95 sourceq->add_task(task243);
96
97 auto tensor244 = vector<shared_ptr<Tensor>>{I337, v2_};
98 auto task244 = make_shared<Task244>(tensor244, pindex);
99 task243->add_dep(task244);
100 task244->add_dep(task235);
101 sourceq->add_task(task244);
102
103 vector<IndexRange> I340_index = {closed_, virt_, active_, active_};
104 auto I340 = make_shared<Tensor>(I340_index);
105 auto tensor245 = vector<shared_ptr<Tensor>>{s, I340};
106 auto task245 = make_shared<Task245>(tensor245, pindex);
107 task245->add_dep(task235);
108 sourceq->add_task(task245);
109
110 vector<IndexRange> I341_index = {closed_, virt_, active_, active_};
111 auto I341 = make_shared<Tensor>(I341_index);
112 auto tensor246 = vector<shared_ptr<Tensor>>{I340, Gamma25_(), I341};
113 auto task246 = make_shared<Task246>(tensor246, pindex);
114 task245->add_dep(task246);
115 task246->add_dep(task235);
116 sourceq->add_task(task246);
117
118 auto tensor247 = vector<shared_ptr<Tensor>>{I341, v2_};
119 auto task247 = make_shared<Task247>(tensor247, pindex);
120 task246->add_dep(task247);
121 task247->add_dep(task235);
122 sourceq->add_task(task247);
123
124 auto tensor248 = vector<shared_ptr<Tensor>>{I340, Gamma26_(), v2_};
125 auto task248 = make_shared<Task248>(tensor248, pindex);
126 task245->add_dep(task248);
127 task248->add_dep(task235);
128 sourceq->add_task(task248);
129
130 auto tensor249 = vector<shared_ptr<Tensor>>{I340, Gamma24_(), v2_};
131 auto task249 = make_shared<Task249>(tensor249, pindex);
132 task245->add_dep(task249);
133 task249->add_dep(task235);
134 sourceq->add_task(task249);
135
136 auto tensor250 = vector<shared_ptr<Tensor>>{I340, Gamma29_(), h1_};
137 auto task250 = make_shared<Task250>(tensor250, pindex);
138 task245->add_dep(task250);
139 task250->add_dep(task235);
140 sourceq->add_task(task250);
141
142 vector<IndexRange> I348_index = {closed_, virt_, active_, active_};
143 auto I348 = make_shared<Tensor>(I348_index);
144 auto tensor251 = vector<shared_ptr<Tensor>>{s, I348};
145 auto task251 = make_shared<Task251>(tensor251, pindex);
146 task251->add_dep(task235);
147 sourceq->add_task(task251);
148
149 vector<IndexRange> I349_index = {closed_, virt_, active_, active_};
150 auto I349 = make_shared<Tensor>(I349_index);
151 auto tensor252 = vector<shared_ptr<Tensor>>{I348, Gamma25_(), I349};
152 auto task252 = make_shared<Task252>(tensor252, pindex);
153 task251->add_dep(task252);
154 task252->add_dep(task235);
155 sourceq->add_task(task252);
156
157 auto tensor253 = vector<shared_ptr<Tensor>>{I349, v2_};
158 auto task253 = make_shared<Task253>(tensor253, pindex);
159 task252->add_dep(task253);
160 task253->add_dep(task235);
161 sourceq->add_task(task253);
162
163 auto tensor254 = vector<shared_ptr<Tensor>>{I348, Gamma5_(), v2_};
164 auto task254 = make_shared<Task254>(tensor254, pindex);
165 task251->add_dep(task254);
166 task254->add_dep(task235);
167 sourceq->add_task(task254);
168
169 auto tensor255 = vector<shared_ptr<Tensor>>{I348, Gamma29_(), h1_};
170 auto task255 = make_shared<Task255>(tensor255, pindex);
171 task251->add_dep(task255);
172 task255->add_dep(task235);
173 sourceq->add_task(task255);
174
175 vector<IndexRange> I356_index = {virt_, active_, active_, active_};
176 auto I356 = make_shared<Tensor>(I356_index);
177 auto tensor256 = vector<shared_ptr<Tensor>>{s, I356};
178 auto task256 = make_shared<Task256>(tensor256, pindex);
179 task256->add_dep(task235);
180 sourceq->add_task(task256);
181
182 auto tensor257 = vector<shared_ptr<Tensor>>{I356, Gamma52_(), v2_};
183 auto task257 = make_shared<Task257>(tensor257, pindex);
184 task256->add_dep(task257);
185 task257->add_dep(task235);
186 sourceq->add_task(task257);
187
188 auto tensor258 = vector<shared_ptr<Tensor>>{I356, Gamma49_(), v2_};
189 auto task258 = make_shared<Task258>(tensor258, pindex);
190 task256->add_dep(task258);
191 task258->add_dep(task235);
192 sourceq->add_task(task258);
193
194 auto tensor259 = vector<shared_ptr<Tensor>>{I356, Gamma50_(), h1_};
195 auto task259 = make_shared<Task259>(tensor259, pindex);
196 task256->add_dep(task259);
197 task259->add_dep(task235);
198 sourceq->add_task(task259);
199
200 shared_ptr<Tensor> I360;
201 if (diagonal) {
202 vector<IndexRange> I360_index = {closed_, virt_, closed_, virt_};
203 I360 = make_shared<Tensor>(I360_index);
204 }
205 shared_ptr<Task260> task260;
206 if (diagonal) {
207 auto tensor260 = vector<shared_ptr<Tensor>>{s, I360};
208 task260 = make_shared<Task260>(tensor260, pindex);
209 task260->add_dep(task235);
210 sourceq->add_task(task260);
211 }
212
213 shared_ptr<Task261> task261;
214 if (diagonal) {
215 auto tensor261 = vector<shared_ptr<Tensor>>{I360, v2_};
216 task261 = make_shared<Task261>(tensor261, pindex);
217 task260->add_dep(task261);
218 task261->add_dep(task235);
219 sourceq->add_task(task261);
220 }
221
222 vector<IndexRange> I362_index = {virt_, closed_, virt_, active_};
223 auto I362 = make_shared<Tensor>(I362_index);
224 auto tensor262 = vector<shared_ptr<Tensor>>{s, I362};
225 auto task262 = make_shared<Task262>(tensor262, pindex);
226 task262->add_dep(task235);
227 sourceq->add_task(task262);
228
229 vector<IndexRange> I363_index = {active_, virt_, closed_, virt_};
230 auto I363 = make_shared<Tensor>(I363_index);
231 auto tensor263 = vector<shared_ptr<Tensor>>{I362, Gamma29_(), I363};
232 auto task263 = make_shared<Task263>(tensor263, pindex);
233 task262->add_dep(task263);
234 task263->add_dep(task235);
235 sourceq->add_task(task263);
236
237 auto tensor264 = vector<shared_ptr<Tensor>>{I363, v2_};
238 auto task264 = make_shared<Task264>(tensor264, pindex);
239 task263->add_dep(task264);
240 task264->add_dep(task235);
241 sourceq->add_task(task264);
242
243 vector<IndexRange> I366_index = {virt_, virt_, active_, active_};
244 auto I366 = make_shared<Tensor>(I366_index);
245 auto tensor265 = vector<shared_ptr<Tensor>>{s, I366};
246 auto task265 = make_shared<Task265>(tensor265, pindex);
247 task265->add_dep(task235);
248 sourceq->add_task(task265);
249
250 auto tensor266 = vector<shared_ptr<Tensor>>{I366, Gamma50_(), v2_};
251 auto task266 = make_shared<Task266>(tensor266, pindex);
252 task265->add_dep(task266);
253 task266->add_dep(task235);
254 sourceq->add_task(task266);
255
256 return sourceq;
257 }
258
259
260 #endif
261