2
#include <libdpd/dpd.h>
6
void denom_rhf(struct L_Params);
7
void denom_rohf(struct L_Params);
8
void denom_uhf(struct L_Params);
10
void denom(struct L_Params L_params) {
11
if(params.ref == 0) denom_rhf(L_params);
12
else if(params.ref == 1) denom_rohf(L_params);
13
else if(params.ref == 2) denom_uhf(L_params);
16
void denom_rhf(struct L_Params L_params)
21
dpdbuf4 d, bdIJAB, bdijab, bdIjAb;
24
int h, i, j, a, b, ij, ab;
26
int isym, jsym, asym, bsym;
28
int *occ_off, *vir_off;
30
double Fii, Fjj, Faa, Fbb;
32
L_irr = L_params.irrep;
33
nirreps = moinfo.nirreps;
34
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
35
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
37
dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI");
38
dpd_file2_mat_init(&FMI);
39
dpd_file2_mat_rd(&FMI);
41
dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE");
42
dpd_file2_mat_init(&FAE);
43
dpd_file2_mat_rd(&FAE);
45
/* Alpha one-electron denominator */
46
dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA");
47
dpd_file2_mat_init(&dIA);
48
for(h=0; h < nirreps; h++) { /* irreps of dIA and Fii */
49
for(i=0; i < occpi[h]; i++) {
50
Fii = FMI.matrix[h][i][i];
51
for(a=0; a < virtpi[h^L_irr]; a++) {
52
Faa = FAE.matrix[h^L_irr][a][a];
53
dIA.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy);
57
dpd_file2_mat_wrt(&dIA);
58
dpd_file2_mat_close(&dIA);
59
dpd_file2_close(&dIA);
61
/* Alpha-beta two-electron denominator */
62
dpd_file4_init(&dIjAb, CC_DENOM, L_irr, 0, 5, "dIjAb");
64
for(h=0; h < nirreps; h++) {
65
dpd_file4_mat_irrep_init(&dIjAb, h);
66
/* Loop over the rows */
67
for(ij=0; ij < dIjAb.params->rowtot[h]; ij++) {
68
i = dIjAb.params->roworb[h][ij][0];
69
j = dIjAb.params->roworb[h][ij][1];
70
isym = dIjAb.params->psym[i];
71
jsym = dIjAb.params->qsym[j];
73
/* Convert to relative orbital index */
74
I = i - occ_off[isym];
75
J = j - occ_off[jsym];
76
Fii = FMI.matrix[isym][I][I];
77
Fjj = FMI.matrix[jsym][J][J];
79
/* Loop over the columns */
80
for(ab=0; ab < dIjAb.params->coltot[h^L_irr]; ab++) {
81
a = dIjAb.params->colorb[h^L_irr][ab][0];
82
b = dIjAb.params->colorb[h^L_irr][ab][1];
83
asym = dIjAb.params->rsym[a];
84
bsym = dIjAb.params->ssym[b];
86
/* Convert to relative orbital index */
87
A = a - vir_off[asym];
88
B = b - vir_off[bsym];
90
Faa = FAE.matrix[asym][A][A];
91
Fbb = FAE.matrix[bsym][B][B];
93
dIjAb.matrix[h][ij][ab] = 1.0/(Fii + Fjj - Faa - Fbb + L_params.cceom_energy);
96
dpd_file4_mat_irrep_wrt(&dIjAb, h);
97
dpd_file4_mat_irrep_close(&dIjAb, h);
99
dpd_file4_close(&dIjAb);
101
dpd_file2_mat_close(&FMI);
102
dpd_file2_mat_close(&FAE);
103
dpd_file2_close(&FMI);
104
dpd_file2_close(&FAE);
109
void denom_uhf(struct L_Params L_params)
111
int nirreps, h, i, j, a, b, ij, ab, I, J, A, B, isym, jsym, asym, bsym, m, e;
112
int *aoccpi, *boccpi, *avirtpi, *bvirtpi;
113
int *aocc_off, *bocc_off, *avir_off, *bvir_off, L_irr;
114
dpdfile2 LFMIt, LFmit, LFaet, LFAEt;
115
dpdfile2 FMI, Fmi, FAE, Fae;
117
dpdfile4 dIJAB, dijab, dIjAb;
118
double Fii, Fjj, Faa, Fbb;
120
L_irr = L_params.irrep;
121
nirreps = moinfo.nirreps;
122
aoccpi = moinfo.aoccpi;
123
boccpi = moinfo.boccpi;
124
avirtpi = moinfo.avirtpi;
125
bvirtpi = moinfo.bvirtpi;
126
aocc_off = moinfo.aocc_off;
127
bocc_off = moinfo.bocc_off;
128
avir_off = moinfo.avir_off;
129
bvir_off = moinfo.bvir_off;
131
if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) {
133
dpd_file2_init(&LFMIt, CC_OEI, 0, 0, 0, "fIJ");
134
dpd_file2_mat_init(&LFMIt);
135
dpd_file2_mat_rd(&LFMIt);
137
dpd_file2_init(&LFmit, CC_OEI, 0, 2, 2, "fij");
138
dpd_file2_mat_init(&LFmit);
139
dpd_file2_mat_rd(&LFmit);
141
dpd_file2_init(&LFaet, CC_OEI, 0, 3, 3, "fab");
142
dpd_file2_mat_init(&LFaet);
143
dpd_file2_mat_rd(&LFaet);
145
dpd_file2_init(&LFAEt, CC_OEI, 0, 1, 1, "fAB");
146
dpd_file2_mat_init(&LFAEt);
147
dpd_file2_mat_rd(&LFAEt);
151
dpd_file2_init(&LFMIt, CC_OEI, 0, 0, 0, "FMI");
152
dpd_file2_mat_init(&LFMIt);
153
dpd_file2_mat_rd(&LFMIt);
155
dpd_file2_init(&LFmit, CC_OEI, 0, 2, 2, "Fmi");
156
dpd_file2_mat_init(&LFmit);
157
dpd_file2_mat_rd(&LFmit);
159
dpd_file2_init(&LFaet, CC_OEI, 0, 3, 3, "Fae");
160
dpd_file2_mat_init(&LFaet);
161
dpd_file2_mat_rd(&LFaet);
163
dpd_file2_init(&LFAEt, CC_OEI, 0, 1, 1, "FAE");
164
dpd_file2_mat_init(&LFAEt);
165
dpd_file2_mat_rd(&LFAEt);
168
dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA");
169
dpd_file2_mat_init(&dIA);
170
for(h=0; h < nirreps; h++) {
171
for(i=0; i < aoccpi[h]; i++) {
172
Fii = LFMIt.matrix[h][i][i];
173
for(a=0; a < avirtpi[h^L_irr]; a++) {
174
Faa = LFAEt.matrix[h^L_irr][a][a];
175
dIA.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy);
179
dpd_file2_mat_wrt(&dIA);
180
dpd_file2_mat_close(&dIA);
181
dpd_file2_close(&dIA);
183
dpd_file2_init(&dia, CC_DENOM, L_irr, 2, 3, "dia");
184
dpd_file2_mat_init(&dia);
185
for(h=0; h < nirreps; h++) {
186
for(i=0; i < boccpi[h]; i++) {
187
Fii = LFmit.matrix[h][i][i];
188
for(a=0; a < bvirtpi[h^L_irr]; a++) {
189
Faa = LFaet.matrix[h^L_irr][a][a];
190
dia.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy);
194
dpd_file2_mat_wrt(&dia);
195
dpd_file2_mat_close(&dia);
196
dpd_file2_close(&dia);
198
dpd_file4_init(&dIJAB, CC_DENOM, L_irr, 1, 6, "dIJAB");
199
for(h=0; h < nirreps; h++) {
200
dpd_file4_mat_irrep_init(&dIJAB, h);
201
for(ij=0; ij < dIJAB.params->rowtot[h]; ij++) {
202
i = dIJAB.params->roworb[h][ij][0];
203
j = dIJAB.params->roworb[h][ij][1];
204
isym = dIJAB.params->psym[i];
205
jsym = dIJAB.params->qsym[j];
206
I = i - aocc_off[isym];
207
J = j - aocc_off[jsym];
208
Fii = LFMIt.matrix[isym][I][I];
209
Fjj = LFMIt.matrix[jsym][J][J];
211
for(ab=0; ab < dIJAB.params->coltot[h^L_irr]; ab++) {
212
a = dIJAB.params->colorb[h^L_irr][ab][0];
213
b = dIJAB.params->colorb[h^L_irr][ab][1];
214
asym = dIJAB.params->rsym[a];
215
bsym = dIJAB.params->ssym[b];
216
A = a - avir_off[asym];
217
B = b - avir_off[bsym];
218
Faa = LFAEt.matrix[asym][A][A];
219
Fbb = LFAEt.matrix[bsym][B][B];
221
dIJAB.matrix[h][ij][ab] = 1.0/(Fii + Fjj - Faa - Fbb
222
+ L_params.cceom_energy);
225
dpd_file4_mat_irrep_wrt(&dIJAB, h);
226
dpd_file4_mat_irrep_close(&dIJAB, h);
228
dpd_file4_close(&dIJAB);
230
dpd_file4_init(&dijab, CC_DENOM, L_irr, 11, 16, "dijab");
232
for(h=0; h < nirreps; h++) {
233
dpd_file4_mat_irrep_init(&dijab, h);
234
for(ij=0; ij < dijab.params->rowtot[h]; ij++) {
235
i = dijab.params->roworb[h][ij][0];
236
j = dijab.params->roworb[h][ij][1];
237
isym = dijab.params->psym[i];
238
jsym = dijab.params->qsym[j];
239
I = i - bocc_off[isym];
240
J = j - bocc_off[jsym];
241
Fii = LFmit.matrix[isym][I][I];
242
Fjj = LFmit.matrix[jsym][J][J];
244
for(ab=0; ab < dijab.params->coltot[h^L_irr]; ab++) {
245
a = dijab.params->colorb[h^L_irr][ab][0];
246
b = dijab.params->colorb[h^L_irr][ab][1];
247
asym = dijab.params->rsym[a];
248
bsym = dijab.params->ssym[b];
249
A = a - bvir_off[asym];
250
B = b - bvir_off[bsym];
251
Faa = LFaet.matrix[asym][A][A];
252
Fbb = LFaet.matrix[bsym][B][B];
254
dijab.matrix[h][ij][ab] = 1.0/(Fii + Fjj - Faa - Fbb
255
+ L_params.cceom_energy);
258
dpd_file4_mat_irrep_wrt(&dijab, h);
259
dpd_file4_mat_irrep_close(&dijab, h);
261
dpd_file4_close(&dijab);
263
dpd_file4_init(&dIjAb, CC_DENOM, L_irr, 22, 28, "dIjAb");
265
for(h=0; h < nirreps; h++) {
266
dpd_file4_mat_irrep_init(&dIjAb, h);
267
for(ij=0; ij < dIjAb.params->rowtot[h]; ij++) {
268
i = dIjAb.params->roworb[h][ij][0];
269
j = dIjAb.params->roworb[h][ij][1];
270
isym = dIjAb.params->psym[i];
271
jsym = dIjAb.params->qsym[j];
272
I = i - aocc_off[isym];
273
J = j - bocc_off[jsym];
274
Fii = LFMIt.matrix[isym][I][I];
275
Fjj = LFmit.matrix[jsym][J][J];
277
for(ab=0; ab < dIjAb.params->coltot[h^L_irr]; ab++) {
278
a = dIjAb.params->colorb[h^L_irr][ab][0];
279
b = dIjAb.params->colorb[h^L_irr][ab][1];
280
asym = dIjAb.params->rsym[a];
281
bsym = dIjAb.params->ssym[b];
282
A = a - avir_off[asym];
283
B = b - bvir_off[bsym];
284
Faa = LFAEt.matrix[asym][A][A];
285
Fbb = LFaet.matrix[bsym][B][B];
287
dIjAb.matrix[h][ij][ab] = 1.0/(Fii + Fjj - Faa - Fbb
288
+ L_params.cceom_energy);
291
dpd_file4_mat_irrep_wrt(&dIjAb, h);
292
dpd_file4_mat_irrep_close(&dIjAb, h);
294
dpd_file4_close(&dIjAb);
296
dpd_file2_mat_close(&LFMIt);
297
dpd_file2_mat_close(&LFmit);
298
dpd_file2_mat_close(&LFAEt);
299
dpd_file2_mat_close(&LFaet);
300
dpd_file2_close(&LFMIt);
301
dpd_file2_close(&LFmit);
302
dpd_file2_close(&LFAEt);
303
dpd_file2_close(&LFaet);
305
/* if((!strcmp(params.wfn,"CC2")) || (!strcmp(params.wfn,"EOM_CC2"))) { */
306
/* dpd_file2_init(&FMI, CC_OEI, 0, 0, 0, "FMI"); */
307
/* dpd_file2_init(&Fmi, CC_OEI, 0, 2, 2, "Fmi"); */
309
/* dpd_file2_mat_init(&FMI); */
310
/* dpd_file2_mat_rd(&FMI); */
311
/* dpd_file2_mat_init(&Fmi); */
312
/* dpd_file2_mat_rd(&Fmi); */
314
/* for(h=0; h < moinfo.nirreps; h++) { */
315
/* for(m=0; m < FMI.params->rowtot[h]; m++) */
316
/* FMI.matrix[h][m][m] = 0; */
317
/* for(m=0; m < Fmi.params->rowtot[h]; m++) */
318
/* Fmi.matrix[h][m][m] = 0; */
321
/* dpd_file2_mat_wrt(&FMI); */
322
/* dpd_file2_mat_close(&FMI); */
323
/* dpd_file2_mat_wrt(&Fmi); */
324
/* dpd_file2_mat_close(&Fmi); */
326
/* dpd_file2_close(&FMI); */
327
/* dpd_file2_close(&Fmi); */
329
/* dpd_file2_init(&FAE, CC_OEI, 0, 1, 1, "FAE"); */
330
/* dpd_file2_init(&Fae, CC_OEI, 0, 3, 3, "Fae"); */
332
/* dpd_file2_mat_init(&FAE); */
333
/* dpd_file2_mat_rd(&FAE); */
334
/* dpd_file2_mat_init(&Fae); */
335
/* dpd_file2_mat_rd(&Fae); */
337
/* for(h=0; h < moinfo.nirreps; h++) { */
338
/* for(e=0; e < FAE.params->coltot[h]; e++) */
339
/* FAE.matrix[h][e][e] = 0; */
340
/* for(e=0; e < Fae.params->coltot[h]; e++) */
341
/* Fae.matrix[h][e][e] = 0; */
344
/* dpd_file2_mat_wrt(&FAE); */
345
/* dpd_file2_mat_close(&FAE); */
346
/* dpd_file2_mat_wrt(&Fae); */
347
/* dpd_file2_mat_close(&Fae); */
349
/* dpd_file2_close(&FAE); */
350
/* dpd_file2_close(&Fae); */
356
void denom_rohf(struct L_Params L_params)
358
dpdfile2 LFAEt, LFaet, LFMIt, LFmit;
360
dpdfile4 dIJAB, dijab, dIjAb;
361
dpdbuf4 d, bdIJAB, bdijab, bdIjAb;
364
int h, i, j, a, b, ij, ab;
366
int isym, jsym, asym, bsym;
368
int *occ_off, *vir_off;
370
double Fii, Fjj, Faa, Fbb;
372
L_irr = L_params.irrep;
373
nirreps = moinfo.nirreps;
374
occpi = moinfo.occpi; virtpi = moinfo.virtpi;
375
openpi = moinfo.openpi;
376
occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
378
dpd_file2_init(&LFMIt, CC_OEI, 0, 0, 0, "FMI");
379
dpd_file2_mat_init(&LFMIt);
380
dpd_file2_mat_rd(&LFMIt);
382
dpd_file2_init(&LFmit, CC_OEI, 0, 0, 0, "Fmi");
383
dpd_file2_mat_init(&LFmit);
384
dpd_file2_mat_rd(&LFmit);
386
dpd_file2_init(&LFaet, CC_OEI, 0, 1, 1, "Fae");
387
dpd_file2_mat_init(&LFaet);
388
dpd_file2_mat_rd(&LFaet);
390
dpd_file2_init(&LFAEt, CC_OEI, 0, 1, 1, "FAE");
391
dpd_file2_mat_init(&LFAEt);
392
dpd_file2_mat_rd(&LFAEt);
394
/* Alpha one-electron denominator */
395
dpd_file2_init(&dIA, CC_DENOM, L_irr, 0, 1, "dIA");
396
dpd_file2_mat_init(&dIA);
397
for(h=0; h < nirreps; h++) { /* irreps of dIA and Fii */
398
for(i=0; i < occpi[h]; i++) {
399
Fii = LFMIt.matrix[h][i][i];
400
for(a=0; a < (virtpi[h^L_irr] - openpi[h^L_irr]); a++) {
401
Faa = LFAEt.matrix[h^L_irr][a][a];
402
dIA.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy);
406
dpd_file2_mat_wrt(&dIA);
407
dpd_file2_mat_close(&dIA);
408
dpd_file2_close(&dIA);
410
/* Beta one-electron denominator */
411
dpd_file2_init(&dia, CC_DENOM, L_irr, 0, 1, "dia");
412
dpd_file2_mat_init(&dia);
413
for(h=0; h < nirreps; h++) {
414
for(i=0; i < (occpi[h] - openpi[h]); i++) {
415
Fii = LFmit.matrix[h][i][i];
416
for(a=0; a < virtpi[h^L_irr]; a++) {
417
Faa = LFaet.matrix[h^L_irr][a][a];
418
dia.matrix[h][i][a] = 1.0/(Fii - Faa + L_params.cceom_energy);
422
dpd_file2_mat_wrt(&dia);
423
dpd_file2_mat_close(&dia);
424
dpd_file2_close(&dia);
426
/* Alpha-alpha two-electron denominator */
427
dpd_file4_init(&dIJAB, CC_DENOM, L_irr, 1, 6, "dIJAB");
429
for(h=0; h < nirreps; h++) {
430
dpd_file4_mat_irrep_init(&dIJAB, h);
431
/* Loop over the rows */
432
for(ij=0; ij < dIJAB.params->rowtot[h]; ij++) {
433
i = dIJAB.params->roworb[h][ij][0];
434
j = dIJAB.params->roworb[h][ij][1];
435
isym = dIJAB.params->psym[i];
436
jsym = dIJAB.params->qsym[j];
438
/* Convert to relative orbital index */
439
I = i - occ_off[isym];
440
J = j - occ_off[jsym];
442
Fii = LFMIt.matrix[isym][I][I];
443
Fjj = LFMIt.matrix[jsym][J][J];
445
/* Loop over the columns */
446
for(ab=0; ab < dIJAB.params->coltot[h^L_irr]; ab++) {
447
a = dIJAB.params->colorb[h^L_irr][ab][0];
448
b = dIJAB.params->colorb[h^L_irr][ab][1];
449
asym = dIJAB.params->rsym[a];
450
bsym = dIJAB.params->ssym[b];
452
/* Convert to relative orbital index */
453
A = a - vir_off[asym];
454
B = b - vir_off[bsym];
456
Faa = LFAEt.matrix[asym][A][A];
457
Fbb = LFAEt.matrix[bsym][B][B];
459
dIJAB.matrix[h][ij][ab] =
460
((A >= (virtpi[asym] - openpi[asym])) ||
461
(B >= (virtpi[bsym] - openpi[bsym])) ?
462
0.0 : 1.0/(Fii + Fjj - Faa - Fbb
463
+ L_params.cceom_energy));
466
dpd_file4_mat_irrep_wrt(&dIJAB, h);
467
dpd_file4_mat_irrep_close(&dIJAB, h);
469
dpd_file4_close(&dIJAB);
471
/* Beta-beta two-electron denominator */
472
dpd_file4_init(&dijab, CC_DENOM, L_irr, 1, 6, "dijab");
474
for(h=0; h < nirreps; h++) {
475
dpd_file4_mat_irrep_init(&dijab, h);
476
/* Loop over the rows */
477
for(ij=0; ij < dijab.params->rowtot[h]; ij++) {
478
i = dijab.params->roworb[h][ij][0];
479
j = dijab.params->roworb[h][ij][1];
480
isym = dijab.params->psym[i];
481
jsym = dijab.params->qsym[j];
483
/* Convert to relative orbital index */
484
I = i - occ_off[isym];
485
J = j - occ_off[jsym];
487
Fii = LFmit.matrix[isym][I][I];
488
Fjj = LFmit.matrix[jsym][J][J];
490
/* Loop over the columns */
491
for(ab=0; ab < dijab.params->coltot[h^L_irr]; ab++) {
492
a = dijab.params->colorb[h^L_irr][ab][0];
493
b = dijab.params->colorb[h^L_irr][ab][1];
494
asym = dijab.params->rsym[a];
495
bsym = dijab.params->ssym[b];
497
/* Convert to relative orbital index */
498
A = a - vir_off[asym];
499
B = b - vir_off[bsym];
501
Faa = LFaet.matrix[asym][A][A];
502
Fbb = LFaet.matrix[bsym][B][B];
504
dijab.matrix[h][ij][ab] =
505
((I >= (occpi[isym] - openpi[isym])) ||
506
(J >= (occpi[jsym] - openpi[jsym])) ?
507
0.0 : 1.0/(Fii + Fjj - Faa - Fbb
508
+ L_params.cceom_energy));
511
dpd_file4_mat_irrep_wrt(&dijab, h);
512
dpd_file4_mat_irrep_close(&dijab, h);
514
dpd_file4_close(&dijab);
517
/* Alpha-beta two-electron denominator */
518
dpd_file4_init(&dIjAb, CC_DENOM, L_irr, 0, 5, "dIjAb");
520
for(h=0; h < nirreps; h++) {
521
dpd_file4_mat_irrep_init(&dIjAb, h);
522
/* Loop over the rows */
523
for(ij=0; ij < dIjAb.params->rowtot[h]; ij++) {
524
i = dIjAb.params->roworb[h][ij][0];
525
j = dIjAb.params->roworb[h][ij][1];
526
isym = dIjAb.params->psym[i];
527
jsym = dIjAb.params->qsym[j];
529
/* Convert to relative orbital index */
530
I = i - occ_off[isym];
531
J = j - occ_off[jsym];
532
Fii = LFMIt.matrix[isym][I][I];
533
Fjj = LFmit.matrix[jsym][J][J];
535
/* Loop over the columns */
536
for(ab=0; ab < dIjAb.params->coltot[h^L_irr]; ab++) {
537
a = dIjAb.params->colorb[h^L_irr][ab][0];
538
b = dIjAb.params->colorb[h^L_irr][ab][1];
539
asym = dIjAb.params->rsym[a];
540
bsym = dIjAb.params->ssym[b];
542
/* Convert to relative orbital index */
543
A = a - vir_off[asym];
544
B = b - vir_off[bsym];
546
Faa = LFAEt.matrix[asym][A][A];
547
Fbb = LFaet.matrix[bsym][B][B];
549
dIjAb.matrix[h][ij][ab] =
550
((A >= (virtpi[asym] - openpi[asym])) ||
551
(J >= (occpi[jsym] - openpi[jsym])) ?
552
0.0 : 1.0/(Fii + Fjj - Faa - Fbb
553
+ L_params.cceom_energy));
556
dpd_file4_mat_irrep_wrt(&dIjAb, h);
557
dpd_file4_mat_irrep_close(&dIjAb, h);
559
dpd_file4_close(&dIjAb);
561
dpd_file2_mat_close(&LFMIt);
562
dpd_file2_mat_close(&LFmit);
563
dpd_file2_mat_close(&LFAEt);
564
dpd_file2_mat_close(&LFaet);
565
dpd_file2_close(&LFMIt);
566
dpd_file2_close(&LFmit);
567
dpd_file2_close(&LFAEt);
568
dpd_file2_close(&LFaet);