3
\brief Enter brief description of file here
6
#include <libdpd/dpd.h>
13
namespace psi { namespace cchbar {
15
/* cc2_Wabei(): Compute the Wabei matrix from CC2 theory, which is
16
** given in spin orbitals as:
18
** Wabei = <ab||ei> - P(ab) t_m^a <mb||ei> + t_i^f <ab||ef>
19
** - P(ab) t_i^f t_m^b <am||ef> + t_m^a t_n^b <mn||ei>
20
** + t_m^a t_i^f t_n^b <mn||ef>
22
** The basic strategy for this code is to generate two intermediate
23
** quantities, Z1(Ab,EI) and Z2(Ei,Ab), which are summed in the final
24
** step to give the complete W(Ei,Ab) intermediate. This is sorted
25
** to W(iE,bA) storage for use in the triples equations.
30
void purge_cc2_Wabei(void);
32
void cc2_Wabei_build(void)
36
int Gef, Gab, Gei, Ge, Gf, Gi;
37
int nrows, ncols, nlinks;
38
dpdfile2 t1, tIA, tia;
39
dpdbuf4 Z, Z1, Z2, Z3;
40
dpdbuf4 B, C, D, F, W;
43
if(params.ref == 0) { /** RHF **/
45
dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>");
46
dpd_buf4_copy(&F, CC_TMP0, "CC2 WAbEi (Ei,Ab)");
51
else if (params.ref == 1) { /* ROHF */
52
dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
53
dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia");
55
/* W(A>B,EI) <--- <AB||EI> */
56
/* W(a>b,ei) <--- <ab||ei> */
57
dpd_buf4_init(&F, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>");
58
dpd_buf4_sort(&F, CC_TMP2, rspq, 7, 11, "CC2 WABEI (A>B,EI)");
59
dpd_buf4_sort(&F, CC_TMP2, rspq, 7, 11, "CC2 Wabei (a>b,ei)");
62
/* W(Ab,Ei) <--- <Ab|Ei> */
63
/* W(aB,eI) <--- <aB|eI> */
64
dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>");
65
dpd_buf4_sort(&F, CC_TMP2, rspq, 5, 11, "CC2 WAbEi (Ab,Ei)");
66
dpd_buf4_sort(&F, CC_TMP2, rspq, 5, 11, "CC2 WaBeI (aB,eI)");
70
else if (params.ref == 2) { /* UHF */
71
/* W(A>B,EI) <--- <AB||EI> */
72
dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>");
73
dpd_buf4_sort(&F, CC_TMP0, rspq, 7, 21, "CC2 WABEI (A>B,EI)");
76
/* W(a>b,ei) <--- <ab||ei> */
77
dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31,15, 1, "F <ai|bc>");
78
dpd_buf4_sort(&F, CC_TMP0, rspq, 17, 31, "CC2 Wabei (a>b,ei)");
81
/* W(Ab,Ei) <--- <Ab|Ei> */
82
dpd_buf4_init(&F, CC_FINTS, 0, 28, 26, 28, 26, 0, "F <Ab|Ci>");
83
dpd_buf4_copy(&F, CC_TMP0, "CC2 WAbEi (Ab,Ei)");
86
/* W(aB,eI) <--- <aB|eI> */
87
dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>");
88
dpd_buf4_sort(&F, CC_TMP0, psrq, 29, 25, "CC2 WaBeI (aB,eI)");
91
timer_off("F->Wabei");
94
if(params.ref == 0) { /** RHF **/
96
dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA");
97
dpd_file2_mat_init(&t1);
98
dpd_file2_mat_rd(&t1);
100
/* WEbEi <-- <Ab|Ef> * t(i,f) */
102
/* Plus Combination */
103
dpd_buf4_init(&B, CC_BINTS, 0, 5, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>");
104
dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 8, 11, 8, 0, "Z1(ei,a>=b)");
106
for(Gef=0; Gef < moinfo.nirreps; Gef++) {
107
Gei = Gab = Gef; /* W and B are totally symmetric */
108
for(Ge=0; Ge < moinfo.nirreps; Ge++) {
109
Gf = Ge ^ Gef; Gi = Gf; /* t1 is totally symmetric */
110
B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]);
111
Z1.matrix[Gef] = dpd_block_matrix(moinfo.occpi[Gi],Z1.params->coltot[Gei]);
112
nrows = moinfo.occpi[Gi];
113
ncols = Z1.params->coltot[Gef];
114
nlinks = moinfo.virtpi[Gf];
115
if(nrows && ncols && nlinks) {
116
for(E=0; E < moinfo.virtpi[Ge]; E++) {
117
e = moinfo.vir_off[Ge] + E;
118
dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]);
119
C_DGEMM('n','n',nrows,ncols,nlinks,0.5,t1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols,
120
0.0,Z1.matrix[Gei][0],ncols);
121
dpd_buf4_mat_irrep_wrt_block(&Z1, Gei, Z1.row_offset[Gei][e], moinfo.occpi[Gi]);
124
dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]);
125
dpd_free_block(Z1.matrix[Gef], moinfo.occpi[Gi], Z1.params->coltot[Gei]);
132
/* Minus Combination */
133
dpd_buf4_init(&B, CC_BINTS, 0, 5, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>");
134
dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 9, 11, 9, 0, "Z2(ei,a>=b)");
136
for(Gef=0; Gef < moinfo.nirreps; Gef++) {
137
Gei = Gab = Gef; /* W and B are totally symmetric */
138
for(Ge=0; Ge < moinfo.nirreps; Ge++) {
139
Gf = Ge ^ Gef; Gi = Gf; /* t1 is totally symmetric */
140
B.matrix[Gef] = dpd_block_matrix(moinfo.virtpi[Gf],B.params->coltot[Gef]);
141
Z2.matrix[Gef] = dpd_block_matrix(moinfo.occpi[Gi],Z2.params->coltot[Gei]);
142
nrows = moinfo.occpi[Gi];
143
ncols = Z2.params->coltot[Gef];
144
nlinks = moinfo.virtpi[Gf];
145
if(nrows && ncols && nlinks) {
146
for(E=0; E < moinfo.virtpi[Ge]; E++) {
147
e = moinfo.vir_off[Ge] + E;
148
dpd_buf4_mat_irrep_rd_block(&B, Gef, B.row_offset[Gef][e], moinfo.virtpi[Gf]);
149
C_DGEMM('n','n',nrows,ncols,nlinks,0.5,t1.matrix[Gi][0],nlinks,B.matrix[Gef][0],ncols,
150
0.0,Z2.matrix[Gei][0],ncols);
151
dpd_buf4_mat_irrep_wrt_block(&Z2, Gei, Z2.row_offset[Gei][e], moinfo.occpi[Gi]);
154
dpd_free_block(B.matrix[Gef], moinfo.virtpi[Gf], B.params->coltot[Gef]);
155
dpd_free_block(Z2.matrix[Gef], moinfo.occpi[Gi], Z2.params->coltot[Gei]);
162
dpd_file2_mat_close(&t1);
163
dpd_file2_close(&t1);
165
dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)");
166
dpd_buf4_init(&Z1, CC_TMP0, 0, 11, 5, 11, 8, 0, "Z1(ei,a>=b)");
167
dpd_buf4_axpy(&Z1, &W, 1);
169
dpd_buf4_init(&Z2, CC_TMP0, 0, 11, 5, 11, 9, 0, "Z2(ei,a>=b)");
170
dpd_buf4_axpy(&Z2, &W, 1);
174
else if (params.ref == 1) { /* ROHF */
176
/** W(A>B,EI) <--- <AB||EF> * t1[I][F] **/
177
/** W(a>b,ei) <--- <ab||ef> * t1[i][f] **/
178
dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 WABEI (A>B,EI)");
179
dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <ab|cd>");
180
dpd_contract424(&B, &tIA, &W, 3, 1, 0, 0.5, 1);
183
dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 Wabei (a>b,ei)");
184
dpd_contract424(&B, &tia, &W, 3, 1, 0, 0.5, 1);
188
/** W(Ab,Ei) <--- <Ab|Ef> * t1[i][f] **/
189
dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WAbEi (Ab,Ei)");
190
dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>");
191
dpd_contract424(&B, &tia, &W, 3, 1, 0, 0.5, 1);
195
/** W(aB,eI) <--- t1[I][F] * <aB|eF> **/
196
dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WaBeI (aB,eI)");
197
dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>");
198
dpd_contract424(&B, &tIA, &W, 3, 1, 0, 0.5, 1.0);
202
dpd_file2_close(&tIA);
203
dpd_file2_close(&tia);
206
else if (params.ref == 2) { /* UHF */
207
dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
208
dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia");
210
/** W(A>B,EI) <--- <AB||EF> * t1[I][F] **/
211
dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "CC2 WABEI (A>B,EI)");
212
dpd_buf4_init(&B, CC_BINTS, 0, 7, 5, 5, 5, 1, "B <AB|CD>");
213
dpd_contract424(&B, &tIA, &W, 3, 1, 0, 1, 1);
217
/** W(a>b,ei) <--- <ab||ef> * t1[i][f] **/
218
dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "CC2 Wabei (a>b,ei)");
219
dpd_buf4_init(&B, CC_BINTS, 0, 17, 15, 15, 15, 1, "B <ab|cd>");
220
dpd_contract424(&B, &tia, &W, 3, 1, 0, 1, 1);
224
/** W(Ab,Ei) <--- <Ab|Ef> * t1[i][f] **/
225
dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 WAbEi (Ab,Ei)");
226
dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>");
227
dpd_contract424(&B, &tia, &W, 3, 1, 0, 1, 1);
231
/** W(aB,eI) <--- t1[I][F] * <aB|eF> **/
232
dpd_buf4_init(&Z, CC_TMP0, 0, 28, 24, 28, 24, 0, "CC2 ZBaIe (Ba,Ie)");
233
dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>");
234
dpd_contract244(&tIA, &B, &Z, 1, 2, 1, 1, 0);
236
dpd_buf4_sort_axpy(&Z, CC_TMP0, qpsr, 29, 25, "CC2 WaBeI (aB,eI)", 1);
239
dpd_file2_close(&tIA);
240
dpd_file2_close(&tia);
242
timer_off("B->Wabei");
244
if(params.ref == 0) { /** RHF **/
245
dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA");
247
dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)");
248
dpd_buf4_init(&Z, CC_TMP0, 0, 11, 10, 11, 10, 0, "CC2 ZMbEj (Ej,Mb)");
249
dpd_contract244(&t1, &Z, &W, 0, 2, 1, -1, 1);
253
dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)");
254
dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "CC2 ZMbeJ (eJ,bM)");
255
dpd_contract424(&Z, &t1, &W, 3, 0, 0, -1, 1);
259
dpd_file2_close(&t1);
261
else if (params.ref == 2) { /* UHF */
262
dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
263
dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia");
266
dpd_buf4_init(&Z1, CC_TMP0, 0, 5, 21, 5, 21, 0, "CC2 ZABEI (AB,EI)");
267
dpd_buf4_init(&Z, CC_TMP0, 0, 20, 21, 20, 21, 0, "CC2 ZMBEJ");
268
dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0);
271
dpd_buf4_sort(&Z1, CC_TMP0, qprs, 5, 21, "CC2 ZABEI (BA,EI)");
272
dpd_buf4_init(&Z, CC_TMP0, 0, 5, 21, 5, 21, 0, "CC2 ZABEI (BA,EI)");
273
dpd_buf4_axpy(&Z, &Z1, -1);
275
dpd_buf4_init(&W, CC_TMP0, 0, 5, 21, 7, 21, 0, "CC2 WABEI (A>B,EI)");
276
dpd_buf4_axpy(&Z1, &W, 1);
281
dpd_buf4_init(&Z1, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 ZAbEi (Ab,Ei)");
282
dpd_buf4_init(&Z, CC_TMP0, 0, 24, 26, 24, 26, 0, "CC2 ZMbEj");
283
dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0);
287
dpd_buf4_init(&Z1, CC_TMP0, 0, 29, 26, 29, 26, 0, "CC2 ZAbEi (bA,Ei)");
288
dpd_buf4_init(&Z, CC_TMP0, 0, 27, 26, 27, 26, 0, "CC2 ZmBEj");
289
dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, -1, 0);
291
dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 28, 26, "CC2 ZAbEi (Ab,Ei)", 1);
294
dpd_buf4_init(&Z, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 ZAbEi (Ab,Ei)");
295
dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 WAbEi (Ab,Ei)");
296
dpd_buf4_axpy(&Z, &W, -1);
301
dpd_buf4_init(&Z1, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 ZaBeI (aB,eI)");
302
dpd_buf4_init(&Z, CC_TMP0, 0, 27, 25, 27, 25, 0, "CC2 ZmBeJ");
303
dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, -1, 0);
307
dpd_buf4_init(&Z1, CC_TMP0, 0, 28, 25, 28, 25, 0, "CC2 ZaBeI (Ba,eI)");
308
dpd_buf4_init(&Z, CC_TMP0, 0, 24, 25, 24, 25, 0, "CC2 ZMbeJ");
309
dpd_contract244(&tIA, &Z, &Z1, 0, 0, 0, -1, 0);
311
dpd_buf4_sort_axpy(&Z1, CC_TMP0, qprs, 29, 25, "CC2 ZaBeI (aB,eI)", 1);
314
dpd_buf4_init(&Z, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 ZaBeI (aB,eI)");
315
dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 WaBeI (aB,eI)");
316
dpd_buf4_axpy(&Z, &W, -1);
321
dpd_buf4_init(&Z1, CC_TMP0, 0, 15, 31, 15, 31, 0, "CC2 Zabei (ab,ei)");
322
dpd_buf4_init(&Z, CC_TMP0, 0, 30, 31, 30, 31, 0, "CC2 Zmbej");
323
dpd_contract244(&tia, &Z, &Z1, 0, 0, 0, -1, 0);
325
dpd_buf4_sort(&Z1, CC_TMP0, qprs, 15, 31, "CC2 Zabei (ba,ei)");
326
dpd_buf4_init(&Z, CC_TMP0, 0, 15, 31, 15, 31, 0, "CC2 Zabei (ba,ei)");
327
dpd_buf4_axpy(&Z, &Z1, -1);
329
dpd_buf4_init(&W, CC_TMP0, 0, 15, 31, 17, 31, 0, "CC2 Wabei (a>b,ei)");
330
dpd_buf4_axpy(&Z1, &W, 1);
334
dpd_file2_close(&tIA);
335
dpd_file2_close(&tia);
338
timer_on("Wabei_sort");
339
if (params.ref == 0) { /* RHF */
341
dpd_buf4_init(&W, CC2_HET1, 0, 5, 11, 5, 11, 0, "CC2 WAbEi");
345
dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)");
346
dpd_buf4_sort_axpy(&W, CC2_HET1, rspq, 5, 11, "CC2 WAbEi", 1);
349
if(!strcmp(params.wfn, "EOM_CC2")) {
350
dpd_buf4_init(&W, CC_TMP0, 0, 11, 5, 11, 5, 0, "CC2 WAbEi (Ei,Ab)");
351
dpd_buf4_copy(&W, CC2_HET1, "CC2 WAbEi (Ei,Ab)");
356
if (params.ref == 1) { /* ROHF */
358
/* sort to Wabei (ei,ab) */
359
dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 WABEI (A>B,EI)");
360
dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 7, "CC2 WABEI (EI,A>B)");
362
dpd_buf4_init(&W, CC_TMP2, 0, 7, 11, 7, 11, 0, "CC2 Wabei (a>b,ei)");
363
dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 7, "CC2 Wabei (ei,a>b)");
365
dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WAbEi (Ab,Ei)");
366
dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 5, "CC2 WAbEi (Ei,Ab)");
368
dpd_buf4_init(&W, CC_TMP2, 0, 5, 11, 5, 11, 0, "CC2 WaBeI (aB,eI)");
369
dpd_buf4_sort(&W, CC2_HET1, rspq, 11, 5, "CC2 WaBeI (eI,aB)");
372
/* purge before final sort */
374
/* purge_cc2_Wabei(); */
376
else if (params.ref == 2) { /* UHF */
378
/* sort to Wabei (ei,ab) */
379
dpd_buf4_init(&W, CC_TMP0, 0, 7, 21, 7, 21, 0, "CC2 WABEI (A>B,EI)");
380
dpd_buf4_sort(&W, CC2_HET1, rspq, 21, 7, "CC2 WABEI (EI,A>B)");
382
dpd_buf4_init(&W, CC_TMP0, 0, 17, 31, 17, 31, 0, "CC2 Wabei (a>b,ei)");
383
dpd_buf4_sort(&W, CC2_HET1, rspq, 31, 17, "CC2 Wabei (ei,a>b)");
385
dpd_buf4_init(&W, CC_TMP0, 0, 28, 26, 28, 26, 0, "CC2 WAbEi (Ab,Ei)");
386
dpd_buf4_sort(&W, CC2_HET1, rspq, 26, 28, "CC2 WAbEi (Ei,Ab)");
388
dpd_buf4_init(&W, CC_TMP0, 0, 29, 25, 29, 25, 0, "CC2 WaBeI (aB,eI)");
389
dpd_buf4_sort(&W, CC2_HET1, rspq, 25, 29, "CC2 WaBeI (eI,aB)");
392
timer_off("Wabei_sort");
396
void purge_cc2_Wabei(void) {
399
int h, a, b, e, f, i, j, m, n;
400
int A, B, E, F, I, J, M, N;
401
int mn, ei, ma, ef, me, jb, mb, ij, ab;
402
int asym, bsym, esym, fsym, isym, jsym, msym, nsym;
403
int *occ_off, *vir_off;
404
int *occ_sym, *vir_sym;
405
int *openpi, nirreps;
407
nirreps = moinfo.nirreps;
408
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
409
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
410
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
411
openpi = moinfo.openpi;
413
/* Purge Wabei matrix elements */
414
dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC2 WABEI (EI,A>B)");
415
for(h=0; h < nirreps; h++) {
416
dpd_file4_mat_irrep_init(&W, h);
417
dpd_file4_mat_irrep_rd(&W, h);
418
for(ei=0; ei<W.params->rowtot[h]; ei++) {
419
e = W.params->roworb[h][ei][0];
420
esym = W.params->psym[e];
421
E = e - vir_off[esym];
422
for(ab=0; ab<W.params->coltot[h]; ab++) {
423
a = W.params->colorb[h][ab][0];
424
b = W.params->colorb[h][ab][1];
425
asym = W.params->rsym[a];
426
bsym = W.params->ssym[b];
427
A = a - vir_off[asym];
428
B = b - vir_off[bsym];
429
if ((E >= (virtpi[esym] - openpi[esym])) ||
430
(A >= (virtpi[asym] - openpi[asym])) ||
431
(B >= (virtpi[bsym] - openpi[bsym])) )
432
W.matrix[h][ei][ab] = 0.0;
435
dpd_file4_mat_irrep_wrt(&W, h);
436
dpd_file4_mat_irrep_close(&W, h);
440
dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC2 Wabei (ei,a>b)");
441
for(h=0; h < nirreps; h++) {
442
dpd_file4_mat_irrep_init(&W, h);
443
dpd_file4_mat_irrep_rd(&W, h);
444
for(ei=0; ei<W.params->rowtot[h]; ei++) {
445
i = W.params->roworb[h][ei][1];
446
isym = W.params->qsym[i];
447
I = i - occ_off[isym];
448
for(ab=0; ab<W.params->coltot[h]; ab++) {
449
if (I >= (occpi[isym] - openpi[isym]))
450
W.matrix[h][ei][ab] = 0.0;
453
dpd_file4_mat_irrep_wrt(&W, h);
454
dpd_file4_mat_irrep_close(&W, h);
458
dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC2 WAbEi (Ei,Ab)");
459
for(h=0; h < nirreps; h++) {
460
dpd_file4_mat_irrep_init(&W, h);
461
dpd_file4_mat_irrep_rd(&W, h);
462
for(ei=0; ei<W.params->rowtot[h]; ei++) {
463
e = W.params->roworb[h][ei][0];
464
i = W.params->roworb[h][ei][1];
465
esym = W.params->psym[e];
466
isym = W.params->qsym[i];
467
E = e - vir_off[esym];
468
I = i - occ_off[isym];
469
for(ab=0; ab<W.params->coltot[h]; ab++) {
470
a = W.params->colorb[h][ab][0];
471
asym = W.params->rsym[a];
472
bsym = W.params->ssym[b];
473
A = a - vir_off[asym];
474
if ((E >= (virtpi[esym] - openpi[esym])) ||
475
(I >= (occpi[isym] - openpi[isym])) ||
476
(A >= (virtpi[asym] - openpi[asym])) )
477
W.matrix[h][ei][ab] = 0.0;
480
dpd_file4_mat_irrep_wrt(&W, h);
481
dpd_file4_mat_irrep_close(&W, h);
485
dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC2 WaBeI (eI,aB)");
486
for(h=0; h < nirreps; h++) {
487
dpd_file4_mat_irrep_init(&W, h);
488
dpd_file4_mat_irrep_rd(&W, h);
489
for(ei=0; ei<W.params->rowtot[h]; ei++) {
490
for(ab=0; ab<W.params->coltot[h]; ab++) {
491
b = W.params->colorb[h][ab][1];
492
bsym = W.params->ssym[b];
493
B = b - vir_off[bsym];
494
if (B >= (virtpi[bsym] - openpi[bsym]))
495
W.matrix[h][ei][ab] = 0.0;
498
dpd_file4_mat_irrep_wrt(&W, h);
499
dpd_file4_mat_irrep_close(&W, h);
506
}} // namespace psi::cchbar