3
\brief Enter brief description of file here
6
#include <libdpd/dpd.h>
14
namespace psi { namespace cclambda {
16
void local_filter_T1(dpdfile2 *T1);
18
void cc2_L1_build(struct L_Params L_params) {
20
int GW, GL1, GL2, Gab, Gij, Gei, Gi, Ga, Gm;
21
int a, A, i, I, ab, nlinks, nrows, ncols;
22
dpdfile2 newLIA, newLia, LIA, Lia;
23
dpdfile2 dIA, dia, Fme, FME;
24
dpdfile2 Fae, FAE, Fmi, FMI;
25
dpdfile2 GMI, Gmi, Gae, XIA, Xia;
26
dpdfile2 GAE, G, GAI, Gai;
27
dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ;
28
dpdbuf4 WMBIJ, Wmbij, WMbIj, WmBiJ;
29
dpdbuf4 LIJAB, Lijab, LIjAb, LiJaB, L2;
30
dpdbuf4 WMNIE, Wmnie, WMnIe, WmNiE;
31
dpdbuf4 WAMEF, Wamef, WAmEf, WaMeF, W;
35
L_irr = L_params.irrep;
37
/* ground state inhomogeneous term is Fme */
38
if (L_params.ground) {
40
dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME");
41
dpd_file2_copy(&FME, CC_LAMBDA, "New LIA");
42
dpd_file2_close(&FME);
44
else if(params.ref == 1) {
45
dpd_file2_init(&Fme,CC_OEI, 0, 0, 1, "Fme");
46
dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME");
47
dpd_file2_copy(&Fme, CC_LAMBDA, "New Lia");
48
dpd_file2_copy(&FME, CC_LAMBDA, "New LIA");
49
dpd_file2_close(&Fme);
50
dpd_file2_close(&FME);
52
else if(params.ref == 2) {
53
dpd_file2_init(&Fme,CC_OEI, 0, 2, 3, "Fme");
54
dpd_file2_init(&FME,CC_OEI, 0, 0, 1, "FME");
55
dpd_file2_copy(&Fme, CC_LAMBDA, "New Lia");
56
dpd_file2_copy(&FME, CC_LAMBDA, "New LIA");
57
dpd_file2_close(&Fme);
58
dpd_file2_close(&FME);
61
/* excited state - no inhomogenous term, first term is -energy*L*/
62
else if (!params.zeta) {
63
if (params.ref == 0 || params.ref == 1) {
64
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
65
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
66
dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia");
67
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia");
68
dpd_file2_axpy(&LIA, &newLIA, -1.0 * L_params.cceom_energy, 0);
69
dpd_file2_axpy(&Lia, &newLia, -1.0 * L_params.cceom_energy, 0);
70
dpd_file2_close(&LIA);
71
dpd_file2_close(&newLIA);
72
dpd_file2_close(&Lia);
73
dpd_file2_close(&newLia);
75
else if (params.ref == 2) {
76
/* do nothing - TDC did not change to increments for the UHF case */
81
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
82
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
84
/* L1 RHS += Lie*Fea */
85
dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE");
86
dpd_contract222(&LIA,&FAE,&newLIA, 0, 1, 1, 1);
87
dpd_file2_close(&FAE);
89
/* L1 RHS += -Lma*Fim */
90
dpd_file2_init(&FMI,CC_OEI, 0, 0, 0, "FMI");
91
dpd_contract222(&FMI,&LIA,&newLIA, 0, 1, -1, 1);
92
dpd_file2_close(&FMI);
94
dpd_file2_close(&LIA);
95
dpd_file2_close(&newLIA);
97
else if(params.ref == 1) { /** ROHF **/
99
else if(params.ref == 2) { /** UHF **/
101
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
102
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia");
104
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
105
dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia");
107
/* L1 RHS += Lie*Fea */
108
dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE");
109
dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae");
110
dpd_contract222(&Lia,&Fae,&newLia, 0, 1, 1, 1);
111
dpd_contract222(&LIA,&FAE,&newLIA, 0, 1, 1, 1);
112
dpd_file2_close(&Fae);
113
dpd_file2_close(&FAE);
115
/* L1 RHS += -Lma*Fim */
116
dpd_file2_init(&FMI,CC_OEI, 0, 0, 0, "FMI");
117
dpd_file2_init(&Fmi,CC_OEI, 0, 2, 2, "Fmi");
118
dpd_contract222(&Fmi,&Lia,&newLia, 0, 1, -1, 1);
119
dpd_contract222(&FMI,&LIA,&newLIA, 0, 1, -1, 1);
120
dpd_file2_close(&Fmi);
121
dpd_file2_close(&FMI);
123
dpd_file2_close(&LIA);
124
dpd_file2_close(&Lia);
126
dpd_file2_close(&newLIA);
127
dpd_file2_close(&newLia);
130
if(params.ref == 0) { /** RHF **/
132
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
133
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
135
/* L1 RHS += Lme*Wieam */
136
dpd_buf4_init(&W, CC2_HET1, 0, 10, 10, 10, 10, 0, "CC2 2 W(ME,jb) + W(Me,Jb)");
137
dpd_contract422(&W, &LIA, &newLIA, 0, 0, 1.0, 1.0);
140
dpd_file2_close(&LIA);
141
dpd_file2_close(&newLIA);
143
else if(params.ref == 1) { /** ROHF **/
145
else if(params.ref == 2) { /** UHF **/
147
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
148
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia");
150
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
151
dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia");
153
dpd_buf4_init(&WMBEJ, CC2_HET1, 0, 20, 21, 20, 21, 0, "CC2 WMBEJ (ME,BJ)");
154
dpd_contract422(&WMBEJ, &LIA, &newLIA, 1, 0, 1, 1);
155
dpd_buf4_close(&WMBEJ);
157
dpd_buf4_init(&Wmbej, CC2_HET1, 0, 30, 31, 30, 31, 0, "CC2 Wmbej (me,bj)");
158
dpd_contract422(&Wmbej, &Lia, &newLia, 1, 0, 1, 1);
159
dpd_buf4_close(&Wmbej);
161
dpd_buf4_init(&WMbEj, CC2_HET1, 0, 20, 31, 20, 31, 0, "CC2 WMbEj (ME,bj)");
162
dpd_contract422(&WMbEj, &Lia, &newLIA, 1, 0, -1, 1);
163
dpd_buf4_close(&WMbEj);
165
dpd_buf4_init(&WmBeJ, CC2_HET1, 0, 30, 21, 30, 21, 0, "CC2 WmBeJ (me,BJ)");
166
dpd_contract422(&WmBeJ, &LIA, &newLia, 1, 0, -1, 1);
167
dpd_buf4_close(&WmBeJ);
169
dpd_file2_close(&LIA);
170
dpd_file2_close(&Lia);
172
dpd_file2_close(&newLIA);
173
dpd_file2_close(&newLia);
177
if(params.ref == 0) { /** RHF **/
179
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
181
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa");
182
dpd_buf4_sort(&L2, CC_TMP0, rspq, 5, 0, "Z (2 AbIj - AbjI)");
185
/* L1 RHS += 1/2 Limef*Wefam */
186
/* Out-of-core contract442 */
188
dpd_buf4_init(&W, CC2_HET1, 0, 5, 11, 5, 11, 0, "CC2 WAbEi");
189
dpd_buf4_init(&L2, CC_TMP0, L_irr, 5, 0, 5, 0, 0, "Z (2 AbIj - AbjI)");
191
/* dpd_contract442(&L2, &W, &newLIA, 0, 0, 1, 1); */
193
GW = W.file.my_irrep;
194
GL2 = L2.file.my_irrep;
195
GL1 = newLIA.my_irrep;
197
dpd_file2_mat_init(&newLIA);
198
dpd_file2_mat_rd(&newLIA);
200
for(Gab=0; Gab < moinfo.nirreps; Gab++) {
202
dpd_buf4_mat_irrep_row_init(&L2, Gab);
203
dpd_buf4_mat_irrep_row_init(&W, Gab);
205
for(ab=0; ab < L2.params->rowtot[Gab]; ab++) {
207
dpd_buf4_mat_irrep_row_zero(&L2, Gab, ab);
208
dpd_buf4_mat_irrep_row_rd(&L2, Gab, ab);
210
dpd_buf4_mat_irrep_row_zero(&W, Gab, ab);
211
dpd_buf4_mat_irrep_row_rd(&W, Gab, ab);
213
for(Gi=0; Gi < moinfo.nirreps; Gi++) {
217
nrows = L2.params->rpi[Gi];
218
ncols = W.params->rpi[Ga];
219
nlinks = L2.params->spi[Gm];
221
if(nrows && ncols && nlinks) {
222
C_DGEMM('n','t',nrows,ncols,nlinks,1.0,
223
&(L2.matrix[Gab][0][L2.col_offset[Gab][Gi]]),nlinks,
224
&(W.matrix[Gab][0][W.col_offset[Gab][Ga]]),nlinks,1.0,
225
&(newLIA.matrix[Gi][0][0]),ncols);
229
dpd_buf4_mat_irrep_row_close(&L2, Gab);
230
dpd_buf4_mat_irrep_row_close(&W, Gab);
232
dpd_file2_mat_wrt(&newLIA);
233
dpd_file2_mat_close(&newLIA);
238
dpd_file2_close(&newLIA);
240
else if(params.ref == 1) { /** ROHF **/
242
else if(params.ref == 2) { /** UHF **/
243
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
244
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia");
246
dpd_buf4_init(&W, CC2_HET1, 0, 21, 7, 21, 7, 0, "CC2 WABEI (EI,A>B)");
247
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 7, 2, 7, 0, "LIJAB");
248
dpd_contract442(&L2, &W, &newLIA, 0, 0, 1, 1);
252
dpd_buf4_init(&W, CC2_HET1, 0, 26, 28, 26, 28, 0, "CC2 WAbEi (Ei,Ab)");
253
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb");
254
dpd_contract442(&L2, &W, &newLIA, 0, 0, 1, 1);
258
dpd_buf4_init(&W, CC2_HET1, 0, 31, 17, 31, 17, 0, "CC2 Wabei (ei,a>b)");
259
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 17, 12, 17, 0, "Lijab");
260
dpd_contract442(&L2, &W, &newLia, 0, 0, 1, 1);
264
dpd_buf4_init(&W, CC2_HET1, 0, 25, 29, 25, 29, 0, "CC2 WaBeI (eI,aB)");
265
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB");
266
dpd_contract442(&L2, &W, &newLia, 0, 0, 1, 1);
270
dpd_file2_close(&newLIA);
271
dpd_file2_close(&newLia);
274
if(params.ref == 0) { /** RHF **/
276
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
278
/* L1 RHS += -1/2 Lmnae*Wiemn */
279
dpd_buf4_init(&W, CC2_HET1, 0, 10, 0, 10, 0, 0, "CC2 WMbIj");
280
dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "2 LIjAb - LIjBa");
281
dpd_contract442(&W, &LIjAb, &newLIA, 0, 2, -1, 1);
282
dpd_buf4_close(&LIjAb);
285
dpd_file2_close(&newLIA);
287
else if(params.ref == 1) { /** ROHF **/
289
else if(params.ref == 2) { /** UHF **/
290
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
291
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia");
293
/* L1 RHS += -1/2 Lmnae*Wiemn */
294
dpd_buf4_init(&WMBIJ, CC2_HET1, 0, 20, 2, 20, 2, 0, "CC2 WMBIJ (MB,I>J)");
295
dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB");
296
dpd_contract442(&WMBIJ, &LIJAB, &newLIA, 0, 2, -1, 1);
297
dpd_buf4_close(&LIJAB);
298
dpd_buf4_close(&WMBIJ);
300
dpd_buf4_init(&WMbIj, CC2_HET1, 0, 24, 22, 24, 22, 0, "CC2 WMbIj (Mb,Ij)");
301
dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb");
302
dpd_contract442(&WMbIj, &LIjAb, &newLIA, 0, 2, -1, 1);
303
dpd_buf4_close(&LIjAb);
304
dpd_buf4_close(&WMbIj);
306
dpd_buf4_init(&Wmbij, CC2_HET1, 0, 30, 12, 30, 12, 0, "CC2 Wmbij (mb,i>j)");
307
dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "Lijab");
308
dpd_contract442(&Wmbij, &Lijab, &newLia, 0, 2, -1, 1);
309
dpd_buf4_close(&Lijab);
310
dpd_buf4_close(&Wmbij);
312
dpd_buf4_init(&WmBiJ, CC2_HET1, 0, 27, 23, 27, 23, 0, "CC2 WmBiJ (mB,iJ)");
313
dpd_buf4_init(&LiJaB, CC_LAMBDA, L_irr, 23, 29, 23, 29, 0, "LiJaB");
314
dpd_contract442(&WmBiJ, &LiJaB, &newLia, 0, 2, -1, 1);
315
dpd_buf4_close(&LiJaB);
316
dpd_buf4_close(&WmBiJ);
318
dpd_file2_close(&newLIA);
319
dpd_file2_close(&newLia);
322
if(params.ref == 0) { /** RHF **/
324
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
326
/* L1 RHS += Gbj*<ij|ab> */
327
dpd_file2_init(&G, CC_TMP0, L_irr, 1, 0, "CC2 GAI");
328
dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)");
329
dpd_contract422(&D, &G, &newLIA, 1, 0, 1, 1);
333
dpd_file2_close(&newLIA);
335
else if(params.ref == 1) { /** ROHF **/
337
else if(params.ref == 2) { /** UHF **/
338
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
339
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia");
341
dpd_file2_init(&GAI, CC_LAMBDA, L_irr, 1, 0, "CC2 GAI");
342
dpd_file2_init(&Gai, CC_LAMBDA, L_irr, 3, 2, "CC2 Gai");
344
/* L1 RHS += Gbj*<ij|ab> */
346
dpd_buf4_init(&D, CC_DINTS, 0, 20, 20, 20, 20, 0, "D <IJ||AB> (IA,JB)");
347
dpd_contract422(&D, &GAI, &newLIA, 1, 0, 1, 1);
350
dpd_buf4_init(&D, CC_DINTS, 0, 20, 30, 20, 30, 0, "D <Ij|Ab> (IA,jb)");
351
dpd_contract422(&D, &Gai, &newLIA, 1, 0, 1, 1);
355
dpd_buf4_init(&D, CC_DINTS, 0, 30, 30, 30, 30, 0, "D <ij||ab> (ia,jb)");
356
dpd_contract422(&D, &Gai, &newLia, 1, 0, 1, 1);
359
dpd_buf4_init(&D, CC_DINTS, 0, 30, 20, 30, 20, 0, "D <Ij|Ab> (ia,JB)");
360
dpd_contract422(&D, &GAI, &newLia, 1, 0, 1, 1);
363
dpd_file2_close(&Gai);
364
dpd_file2_close(&GAI);
366
dpd_file2_close(&newLIA);
367
dpd_file2_close(&newLia);
370
if(params.ref == 0) { /** RHF **/
372
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
373
dpd_file2_copy(&newLIA, CC_LAMBDA, "New LIA Increment");
374
dpd_file2_close(&newLIA);
376
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment");
377
if(params.local && local.filter_singles) local_filter_T1(&newLIA);
379
dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA");
380
dpd_file2_dirprd(&dIA, &newLIA);
381
dpd_file2_close(&dIA);
383
dpd_file2_close(&newLIA);
385
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
386
dpd_file2_copy(&LIA, CC_LAMBDA, "New LIA");
387
dpd_file2_close(&LIA);
388
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
389
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment");
390
dpd_file2_axpy(&LIA, &newLIA, 1, 0);
391
/*dpd_file2_print(&newLIA,outfile);*/
392
dpd_file2_close(&LIA);
394
dpd_file2_copy(&newLIA, CC_LAMBDA, "New Lia"); /* spin-adaptation for RHF */
395
dpd_file2_close(&newLIA);
397
else if(params.ref == 1) { /** ROHF **/
400
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
401
dpd_file2_copy(&newLIA, CC_LAMBDA, "New LIA Increment");
402
dpd_file2_close(&newLIA);
404
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment");
405
dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA");
406
dpd_file2_dirprd(&dIA, &newLIA);
407
dpd_file2_close(&dIA);
408
dpd_file2_close(&newLIA);
410
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
411
dpd_file2_copy(&LIA, CC_LAMBDA, "New LIA");
412
dpd_file2_close(&LIA);
413
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
414
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "New LIA Increment");
415
dpd_file2_axpy(&LIA, &newLIA, 1, 0);
416
dpd_file2_close(&LIA);
417
dpd_file2_close(&newLIA);
419
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia");
420
dpd_file2_copy(&newLia, CC_LAMBDA, "New Lia Increment");
421
dpd_file2_close(&newLia);
423
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia Increment");
424
dpd_file2_init(&dia, CC_DENOM, L_irr, 0, 1, "dia");
425
dpd_file2_dirprd(&dia, &newLia);
426
dpd_file2_close(&dia);
427
dpd_file2_close(&newLia);
429
dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia");
430
dpd_file2_copy(&Lia, CC_LAMBDA, "New Lia");
431
dpd_file2_close(&Lia);
432
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 0, 1, "New Lia");
433
dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "New Lia Increment");
434
dpd_file2_axpy(&Lia, &newLia, 1, 0);
435
dpd_file2_close(&Lia);
436
dpd_file2_close(&newLia);
438
else if(params.ref == 2) { /** UHF **/
441
dpd_file2_init(&newLIA, CC_LAMBDA, L_irr, 0, 1, "New LIA");
442
dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA");
443
dpd_file2_dirprd(&dIA, &newLIA);
444
dpd_file2_close(&dIA);
445
dpd_file2_close(&newLIA);
447
dpd_file2_init(&newLia, CC_LAMBDA, L_irr, 2, 3, "New Lia");
448
dpd_file2_init(&dia, CC_DENOM, L_irr, 2, 3, "dia");
449
dpd_file2_dirprd(&dia, &newLia);
450
dpd_file2_close(&dia);
451
dpd_file2_close(&newLia);
455
check_sum("after L1 build",L_irr);
462
}} // namespace psi::cclambda