3
#include <libdpd/dpd.h>
7
/* functions to fix ROHF intermediates - at least helpful for
10
void purge_HET1(void) {
11
dpdfile2 FAE, Fmi, FME, Fme;
14
int h, a, b, e, f, i, j, m, n, omit;
15
int A, B, E, F, I, J, M, N;
16
int mn, ei, ma, ef, me, jb, mb, ij, ab;
17
int asym, bsym, esym, fsym, isym, jsym, msym, nsym;
18
int *occ_off, *vir_off;
19
int *occ_sym, *vir_sym;
22
nirreps = moinfo.nirreps;
23
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
24
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
25
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
26
openpi = moinfo.openpi;
28
/* Purge Wmnij matrix elements */
29
dpd_file4_init(&W, CC3_HET1, 0, 2, 2,"CC3 Wmnij (m>n,i>j)");
30
for(h=0; h < nirreps; h++) {
31
dpd_file4_mat_irrep_init(&W, h);
32
dpd_file4_mat_irrep_rd(&W, h);
33
for(mn=0; mn < W.params->rowtot[h]; mn++) {
34
m = W.params->roworb[h][mn][0];
35
n = W.params->roworb[h][mn][1];
36
msym = W.params->psym[m];
37
nsym = W.params->qsym[n];
38
M = m - occ_off[msym];
39
N = n - occ_off[nsym];
40
for(ij=0; ij < W.params->coltot[h]; ij++) {
41
i = W.params->colorb[h][ij][0];
42
j = W.params->colorb[h][ij][1];
43
isym = W.params->rsym[i];
44
jsym = W.params->ssym[j];
45
I = i - occ_off[isym];
46
J = j - occ_off[jsym];
47
if ((I >= (occpi[isym] - openpi[isym])) ||
48
(J >= (occpi[jsym] - openpi[jsym])) ||
49
(M >= (occpi[msym] - openpi[msym])) ||
50
(N >= (occpi[nsym] - openpi[nsym])) )
51
W.matrix[h][mn][ij] = 0.0;
54
dpd_file4_mat_irrep_wrt(&W, h);
55
dpd_file4_mat_irrep_close(&W, h);
59
dpd_file4_init(&W, CC3_HET1, 0, 0, 0,"CC3 WMnIj (Mn,Ij)");
60
for(h=0; h < nirreps; h++) {
61
dpd_file4_mat_irrep_init(&W, h);
62
dpd_file4_mat_irrep_rd(&W, h);
63
for(mn=0; mn < W.params->rowtot[h]; mn++) {
64
n = W.params->roworb[h][mn][1];
65
nsym = W.params->qsym[n];
66
N = n - occ_off[nsym];
67
for(ij=0; ij < W.params->coltot[h]; ij++) {
68
j = W.params->colorb[h][ij][1];
69
jsym = W.params->ssym[j];
70
J = j - occ_off[jsym];
71
if ((J >= (occpi[jsym] - openpi[jsym])) ||
72
(N >= (occpi[nsym] - openpi[nsym])) )
73
W.matrix[h][mn][ij] = 0.0;
76
dpd_file4_mat_irrep_wrt(&W, h);
77
dpd_file4_mat_irrep_close(&W, h);
81
/* Purge Wamef matrix elements */
82
dpd_file4_init(&W, CC3_HET1, 0, 11, 7,"CC3 WAMEF (AM,E>F)");
83
for(h=0; h < nirreps; h++) {
84
dpd_file4_mat_irrep_init(&W, h);
85
dpd_file4_mat_irrep_rd(&W, h);
86
for(ma=0; ma < W.params->rowtot[h]; ma++) {
87
a = W.params->roworb[h][ma][0];
88
asym = W.params->psym[a];
89
A = a - vir_off[asym];
90
for(ef=0; ef< W.params->coltot[h]; ef++) {
91
e = W.params->colorb[h][ef][0];
92
f = W.params->colorb[h][ef][1];
93
esym = W.params->rsym[e];
94
fsym = W.params->ssym[f];
95
E = e - vir_off[esym];
96
F = f - vir_off[fsym];
97
if ((A >= (virtpi[asym] - openpi[asym])) ||
98
(E >= (virtpi[esym] - openpi[esym])) ||
99
(F >= (virtpi[fsym] - openpi[fsym])) )
100
W.matrix[h][ma][ef] = 0.0;
103
dpd_file4_mat_irrep_wrt(&W, h);
104
dpd_file4_mat_irrep_close(&W, h);
108
dpd_file4_init(&W, CC3_HET1, 0, 11, 7,"CC3 Wamef (am,e>f)");
109
for(h=0; h < nirreps; h++) {
110
dpd_file4_mat_irrep_init(&W, h);
111
dpd_file4_mat_irrep_rd(&W, h);
112
for(ma=0; ma < W.params->rowtot[h]; ma++) {
113
m = W.params->roworb[h][ma][1];
114
msym = W.params->qsym[m];
115
M = m - occ_off[msym];
116
for(ef=0; ef< W.params->coltot[h]; ef++) {
117
if (M >= (occpi[msym] - openpi[msym]))
118
W.matrix[h][ma][ef] = 0.0;
121
dpd_file4_mat_irrep_wrt(&W, h);
122
dpd_file4_mat_irrep_close(&W, h);
126
dpd_file4_init(&W, CC3_HET1, 0, 11, 5,"CC3 WAmEf (Am,Ef)");
127
for(h=0; h < nirreps; h++) {
128
dpd_file4_mat_irrep_init(&W, h);
129
dpd_file4_mat_irrep_rd(&W, h);
130
for(ma=0; ma < W.params->rowtot[h]; ma++) {
131
a = W.params->roworb[h][ma][0];
132
m = W.params->roworb[h][ma][1];
133
asym = W.params->psym[a];
134
msym = W.params->qsym[m];
135
M = m - occ_off[msym];
136
A = a - vir_off[asym];
137
for(ef=0; ef< W.params->coltot[h]; ef++) {
138
e = W.params->colorb[h][ef][0];
139
esym = W.params->rsym[e];
140
E = e - vir_off[esym];
141
if ((A >= (virtpi[asym] - openpi[asym])) ||
142
(M >= (occpi[msym] - openpi[msym])) ||
143
(E >= (virtpi[esym] - openpi[esym])) )
144
W.matrix[h][ma][ef] = 0.0;
147
dpd_file4_mat_irrep_wrt(&W, h);
148
dpd_file4_mat_irrep_close(&W, h);
152
dpd_file4_init(&W, CC3_HET1, 0, 11, 5,"CC3 WaMeF (aM,eF)");
153
for(h=0; h < nirreps; h++) {
154
dpd_file4_mat_irrep_init(&W, h);
155
dpd_file4_mat_irrep_rd(&W, h);
156
for(ma=0; ma < W.params->rowtot[h]; ma++) {
157
for(ef=0; ef< W.params->coltot[h]; ef++) {
158
f = W.params->colorb[h][ef][1];
159
fsym = W.params->ssym[f];
160
F = f - vir_off[fsym];
161
if (F >= (virtpi[fsym] - openpi[fsym]))
162
W.matrix[h][ma][ef] = 0.0;
165
dpd_file4_mat_irrep_wrt(&W, h);
166
dpd_file4_mat_irrep_close(&W, h);
174
/* Purge Wmnie matrix elements */
175
void purge_HET1_Wmnie(void) {
178
int h, a, b, e, f, i, j, m, n;
179
int A, B, E, F, I, J, M, N;
180
int mn, ei, ma, ef, me, jb, mb, ij, ab;
181
int asym, bsym, esym, fsym, isym, jsym, msym, nsym;
182
int *occ_off, *vir_off;
183
int *occ_sym, *vir_sym;
184
int *openpi, nirreps;
186
nirreps = moinfo.nirreps;
187
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
188
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
189
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
190
openpi = moinfo.openpi;
192
dpd_file4_init(&W, CC3_HET1, 0, 0, 11,"CC3 WMnIe (Mn,eI)");
193
for(h=0; h < nirreps; h++) {
194
dpd_file4_mat_irrep_init(&W, h);
195
dpd_file4_mat_irrep_rd(&W, h);
196
for(mn=0; mn<W.params->rowtot[h]; mn++) {
197
n = W.params->roworb[h][mn][1];
198
nsym = W.params->qsym[n];
199
N = n - occ_off[nsym];
200
for(ei=0; ei<W.params->coltot[h]; ei++) {
201
if (N >= (occpi[nsym] - openpi[nsym]))
202
W.matrix[h][mn][ei] = 0.0;
205
dpd_file4_mat_irrep_wrt(&W, h);
206
dpd_file4_mat_irrep_close(&W, h);
209
dpd_file4_init(&W, CC3_HET1, 0, 2, 11, "CC3 WMNIE (M>N,EI)");
210
for(h=0; h < W.params->nirreps; h++) {
211
dpd_file4_mat_irrep_init(&W, h);
212
dpd_file4_mat_irrep_rd(&W, h);
213
for(mn=0; mn<W.params->rowtot[h]; mn++) {
214
for(ei=0; ei<W.params->coltot[h]; ei++) {
215
e = W.params->colorb[h][ei][0];
216
esym = W.params->rsym[e];
217
E = e - vir_off[esym];
218
if (E >= (virtpi[esym] - openpi[esym]))
219
W.matrix[h][mn][ei] = 0.0;
222
dpd_file4_mat_irrep_wrt(&W, h);
223
dpd_file4_mat_irrep_close(&W, h);
227
dpd_file4_init(&W, CC3_HET1, 0, 2, 11,"CC3 Wmnie (m>n,ei)");
228
for(h=0; h < nirreps; h++) {
229
dpd_file4_mat_irrep_init(&W, h);
230
dpd_file4_mat_irrep_rd(&W, h);
231
for(mn=0; mn<W.params->rowtot[h]; mn++) {
232
m = W.params->roworb[h][mn][0];
233
n = W.params->roworb[h][mn][1];
234
msym = W.params->psym[m];
235
nsym = W.params->qsym[n];
236
M = m - occ_off[msym];
237
N = n - occ_off[nsym];
238
for(ei=0; ei<W.params->coltot[h]; ei++) {
239
i = W.params->colorb[h][ei][1];
240
isym = W.params->ssym[i];
241
I = i - occ_off[isym];
242
if ((M >= (occpi[msym] - openpi[msym])) ||
243
(N >= (occpi[nsym] - openpi[nsym])) ||
244
(I >= (occpi[isym] - openpi[isym])) )
245
W.matrix[h][mn][ei] = 0.0;
248
dpd_file4_mat_irrep_wrt(&W, h);
249
dpd_file4_mat_irrep_close(&W, h);
253
dpd_file4_init(&W, CC3_HET1, 0, 0, 11,"CC3 WmNiE (mN,Ei)");
254
for(h=0; h < nirreps; h++) {
255
dpd_file4_mat_irrep_init(&W, h);
256
dpd_file4_mat_irrep_rd(&W, h);
257
for(mn=0; mn<W.params->rowtot[h]; mn++) {
258
m = W.params->roworb[h][mn][0];
259
msym = W.params->psym[m];
260
M = m - occ_off[msym];
261
for(ei=0; ei<W.params->coltot[h]; ei++) {
262
e = W.params->colorb[h][ei][0];
263
i = W.params->colorb[h][ei][1];
264
esym = W.params->rsym[e];
265
isym = W.params->ssym[i];
266
E = e - vir_off[esym];
267
I = i - occ_off[isym];
268
if ((M >= (occpi[msym] - openpi[msym])) ||
269
(E >= (virtpi[esym] - openpi[esym])) ||
270
(I >= (occpi[isym] - openpi[isym])) )
271
W.matrix[h][mn][ei] = 0.0;
274
dpd_file4_mat_irrep_wrt(&W, h);
275
dpd_file4_mat_irrep_close(&W, h);
281
void purge_Wabei(void) {
284
int h, a, b, e, f, i, j, m, n;
285
int A, B, E, F, I, J, M, N;
286
int mn, ei, ma, ef, me, jb, mb, ij, ab;
287
int asym, bsym, esym, fsym, isym, jsym, msym, nsym;
288
int *occ_off, *vir_off;
289
int *occ_sym, *vir_sym;
290
int *openpi, nirreps;
292
nirreps = moinfo.nirreps;
293
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
294
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
295
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
296
openpi = moinfo.openpi;
298
/* Purge Wabei matrix elements */
299
dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC3 WABEI (EI,A>B)");
300
for(h=0; h < nirreps; h++) {
301
dpd_file4_mat_irrep_init(&W, h);
302
dpd_file4_mat_irrep_rd(&W, h);
303
for(ei=0; ei<W.params->rowtot[h]; ei++) {
304
e = W.params->roworb[h][ei][0];
305
esym = W.params->psym[e];
306
E = e - vir_off[esym];
307
for(ab=0; ab<W.params->coltot[h]; ab++) {
308
a = W.params->colorb[h][ab][0];
309
b = W.params->colorb[h][ab][1];
310
asym = W.params->rsym[a];
311
bsym = W.params->ssym[b];
312
A = a - vir_off[asym];
313
B = b - vir_off[bsym];
314
if ((E >= (virtpi[esym] - openpi[esym])) ||
315
(A >= (virtpi[asym] - openpi[asym])) ||
316
(B >= (virtpi[bsym] - openpi[bsym])) )
317
W.matrix[h][ei][ab] = 0.0;
320
dpd_file4_mat_irrep_wrt(&W, h);
321
dpd_file4_mat_irrep_close(&W, h);
325
dpd_file4_init(&W, CC_TMP2, 0, 11, 7,"CC3 Wabei (ei,a>b)");
326
for(h=0; h < nirreps; h++) {
327
dpd_file4_mat_irrep_init(&W, h);
328
dpd_file4_mat_irrep_rd(&W, h);
329
for(ei=0; ei<W.params->rowtot[h]; ei++) {
330
i = W.params->roworb[h][ei][1];
331
isym = W.params->qsym[i];
332
I = i - occ_off[isym];
333
for(ab=0; ab<W.params->coltot[h]; ab++) {
334
if (I >= (occpi[isym] - openpi[isym]))
335
W.matrix[h][ei][ab] = 0.0;
338
dpd_file4_mat_irrep_wrt(&W, h);
339
dpd_file4_mat_irrep_close(&W, h);
343
dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC3 WAbEi (Ei,Ab)");
344
for(h=0; h < nirreps; h++) {
345
dpd_file4_mat_irrep_init(&W, h);
346
dpd_file4_mat_irrep_rd(&W, h);
347
for(ei=0; ei<W.params->rowtot[h]; ei++) {
348
e = W.params->roworb[h][ei][0];
349
i = W.params->roworb[h][ei][1];
350
esym = W.params->psym[e];
351
isym = W.params->qsym[i];
352
E = e - vir_off[esym];
353
I = i - occ_off[isym];
354
for(ab=0; ab<W.params->coltot[h]; ab++) {
355
a = W.params->colorb[h][ab][0];
356
asym = W.params->rsym[a];
357
bsym = W.params->ssym[b];
358
A = a - vir_off[asym];
359
if ((E >= (virtpi[esym] - openpi[esym])) ||
360
(I >= (occpi[isym] - openpi[isym])) ||
361
(A >= (virtpi[asym] - openpi[asym])) )
362
W.matrix[h][ei][ab] = 0.0;
365
dpd_file4_mat_irrep_wrt(&W, h);
366
dpd_file4_mat_irrep_close(&W, h);
370
dpd_file4_init(&W, CC_TMP2, 0, 11, 5,"CC3 WaBeI (eI,aB)");
371
for(h=0; h < nirreps; h++) {
372
dpd_file4_mat_irrep_init(&W, h);
373
dpd_file4_mat_irrep_rd(&W, h);
374
for(ei=0; ei<W.params->rowtot[h]; ei++) {
375
for(ab=0; ab<W.params->coltot[h]; ab++) {
376
b = W.params->colorb[h][ab][1];
377
bsym = W.params->ssym[b];
378
B = b - vir_off[bsym];
379
if (B >= (virtpi[bsym] - openpi[bsym]))
380
W.matrix[h][ei][ab] = 0.0;
383
dpd_file4_mat_irrep_wrt(&W, h);
384
dpd_file4_mat_irrep_close(&W, h);
389
/* Purge WMBIJ matrix elements */
390
void purge_Wmbij(void) {
393
int h, a, b, e, f, i, j, m, n;
394
int A, B, E, F, I, J, M, N;
395
int mn, ei, ma, ef, me, jb, mb, ij, ab;
396
int asym, bsym, esym, fsym, isym, jsym, msym, nsym;
397
int *occ_off, *vir_off;
398
int *occ_sym, *vir_sym;
399
int *openpi, nirreps;
401
nirreps = moinfo.nirreps;
402
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
403
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
404
occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
405
openpi = moinfo.openpi;
407
dpd_file4_init(&W, CC3_HET1, 0, 10, 2,"CC3 WMBIJ (MB,I>J)");
408
for(h=0; h < nirreps; h++) {
409
dpd_file4_mat_irrep_init(&W, h);
410
dpd_file4_mat_irrep_rd(&W, h);
411
for(mb=0; mb<W.params->rowtot[h]; mb++) {
412
b = W.params->roworb[h][mb][1];
413
bsym = W.params->qsym[b];
414
B = b - vir_off[bsym];
415
for(ij=0; ij<W.params->coltot[h]; ij++) {
416
if (B >= (virtpi[bsym] - openpi[bsym]))
417
W.matrix[h][mb][ij] = 0.0;
420
dpd_file4_mat_irrep_wrt(&W, h);
421
dpd_file4_mat_irrep_close(&W, h);
425
dpd_file4_init(&W, CC3_HET1, 0, 10, 2,"CC3 Wmbij (mb,i>j)");
426
for(h=0; h < nirreps; h++) {
427
dpd_file4_mat_irrep_init(&W, h);
428
dpd_file4_mat_irrep_rd(&W, h);
429
for(mb=0; mb<W.params->rowtot[h]; mb++) {
430
m = W.params->roworb[h][mb][0];
431
msym = W.params->psym[m];
432
M = m - occ_off[msym];
433
for(ij=0; ij<W.params->coltot[h]; ij++) {
434
i = W.params->colorb[h][ij][0];
435
j = W.params->colorb[h][ij][1];
436
isym = W.params->rsym[i];
437
jsym = W.params->ssym[j];
438
I = i - occ_off[isym];
439
J = j - occ_off[jsym];
440
if ((M >= (occpi[msym] - openpi[msym])) ||
441
(I >= (occpi[isym] - openpi[isym])) ||
442
(J >= (occpi[jsym] - openpi[jsym])) )
443
W.matrix[h][mb][ij] = 0.0;
446
dpd_file4_mat_irrep_wrt(&W, h);
447
dpd_file4_mat_irrep_close(&W, h);
451
dpd_file4_init(&W, CC3_HET1, 0, 10, 0,"CC3 WMbIj (Mb,Ij)");
452
for(h=0; h < nirreps; h++) {
453
dpd_file4_mat_irrep_init(&W, h);
454
dpd_file4_mat_irrep_rd(&W, h);
455
for(mb=0; mb<W.params->rowtot[h]; mb++) {
456
for(ij=0; ij<W.params->coltot[h]; ij++) {
457
j = W.params->colorb[h][ij][1];
458
jsym = W.params->ssym[j];
459
J = j - occ_off[jsym];
460
if (J >= (occpi[jsym] - openpi[jsym]))
461
W.matrix[h][mb][ij] = 0.0;
464
dpd_file4_mat_irrep_wrt(&W, h);
465
dpd_file4_mat_irrep_close(&W, h);
469
dpd_file4_init(&W, CC3_HET1, 0, 10, 0,"CC3 WmBiJ (mB,iJ)");
470
for(h=0; h < nirreps; h++) {
471
dpd_file4_mat_irrep_init(&W, h);
472
dpd_file4_mat_irrep_rd(&W, h);
473
for(mb=0; mb<W.params->rowtot[h]; mb++) {
474
m = W.params->roworb[h][mb][0];
475
b = W.params->roworb[h][mb][1];
476
msym = W.params->psym[m];
477
bsym = W.params->qsym[b];
478
M = m - occ_off[msym];
479
B = b - vir_off[bsym];
480
for(ij=0; ij<W.params->coltot[h]; ij++) {
481
i = W.params->colorb[h][ij][0];
482
isym = W.params->rsym[i];
483
I = i - occ_off[isym];
484
if ((M >= (occpi[msym] - openpi[msym])) ||
485
(B >= (virtpi[bsym] - openpi[bsym])) ||
486
(I >= (occpi[isym] - openpi[isym])) )
487
W.matrix[h][mb][ij] = 0.0;
490
dpd_file4_mat_irrep_wrt(&W, h);
491
dpd_file4_mat_irrep_close(&W, h);