3
#include <libdpd/dpd.h>
7
double ET_UHF_AAB_noddy(void)
11
int Gi, Gj, Gk, Ga, Gb, Gc, Ge, Gm;
12
int Gji, Gij, Gjk, Gik, Gbc, Gac, Gba;
13
int I, J, K, A, B, C, E, M;
14
int i, j, k, a, b, c, e, m;
15
int ij, ji, ik, ki, jk, kj;
16
int ab, ba, ac, ca, bc, cb;
17
int ae, be, ec, ke, ie, je;
18
int im, jm, km, mk, ma, mb, mc;
19
int *aoccpi, *avirtpi, *aocc_off, *avir_off;
20
int *boccpi, *bvirtpi, *bocc_off, *bvir_off;
21
double value_c, value_d, denom, ET_AAB;
22
double t_ijae, t_ijbe, t_jkae, t_jkbe, t_jkec, t_ikae, t_ikbe, t_ikec;
23
double F_kecb, F_keca, F_iebc, F_ieac, F_ieab, F_jebc, F_jeac, F_jeab;
24
double t_imbc, t_imac, t_imba, t_jmbc, t_jmac, t_jmba, t_mkbc, t_mkac;
25
double E_kjma, E_kjmb, E_jkmc, E_kima, E_kimb, E_ikmc, E_jima, E_jimb;
26
double t_ia, t_ib, t_ja, t_jb, t_kc;
27
double D_jkbc, D_jkac, D_ikbc, D_ikac, D_jiba;
29
dpdbuf4 FAAints, FABints, FBAints;
30
dpdbuf4 EAAints, EABints, EBAints;
31
dpdbuf4 DAAints, DABints;
32
dpdfile2 T1A, T1B, fIJ, fij, fAB, fab;
34
nirreps = moinfo.nirreps;
35
aoccpi = moinfo.aoccpi;
36
avirtpi = moinfo.avirtpi;
37
aocc_off = moinfo.aocc_off;
38
avir_off = moinfo.avir_off;
39
boccpi = moinfo.boccpi;
40
bvirtpi = moinfo.bvirtpi;
41
bocc_off = moinfo.bocc_off;
42
bvir_off = moinfo.bvir_off;
44
dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ");
45
dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij");
46
dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB");
47
dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab");
48
dpd_file2_mat_init(&fIJ);
49
dpd_file2_mat_init(&fij);
50
dpd_file2_mat_init(&fAB);
51
dpd_file2_mat_init(&fab);
52
dpd_file2_mat_rd(&fIJ);
53
dpd_file2_mat_rd(&fij);
54
dpd_file2_mat_rd(&fAB);
55
dpd_file2_mat_rd(&fab);
57
dpd_file2_init(&T1A, CC_OEI, 0, 0, 1, "tIA");
58
dpd_file2_mat_init(&T1A);
59
dpd_file2_mat_rd(&T1A);
60
dpd_file2_init(&T1B, CC_OEI, 0, 2, 3, "tia");
61
dpd_file2_mat_init(&T1B);
62
dpd_file2_mat_rd(&T1B);
64
dpd_buf4_init(&T2AA, CC_TAMPS, 0, 0, 5, 2, 7, 0, "tIJAB");
65
dpd_buf4_init(&T2AB, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tIjAb");
67
dpd_buf4_init(&FAAints, CC_FINTS, 0, 20, 5, 20, 5, 1, "F <IA|BC>");
68
dpd_buf4_init(&FABints, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>");
69
dpd_buf4_init(&FBAints, CC_FINTS, 0, 27, 29, 27, 29, 0, "F <iA|bC>");
71
dpd_buf4_init(&EAAints, CC_EINTS, 0, 0, 20, 2, 20, 0, "E <IJ||KA> (I>J,KA)");
72
dpd_buf4_init(&EABints, CC_EINTS, 0, 22, 24, 22, 24, 0, "E <Ij|Ka>");
73
dpd_buf4_init(&EBAints, CC_EINTS, 0, 23, 27, 23, 27, 0, "E <iJ|kA>");
75
dpd_buf4_init(&DAAints, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <IJ||AB>");
76
dpd_buf4_init(&DABints, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>");
78
for(h=0; h < nirreps; h++) {
79
dpd_buf4_mat_irrep_init(&T2AA, h);
80
dpd_buf4_mat_irrep_rd(&T2AA, h);
82
dpd_buf4_mat_irrep_init(&T2AB, h);
83
dpd_buf4_mat_irrep_rd(&T2AB, h);
85
dpd_buf4_mat_irrep_init(&FAAints, h);
86
dpd_buf4_mat_irrep_rd(&FAAints, h);
88
dpd_buf4_mat_irrep_init(&FABints, h);
89
dpd_buf4_mat_irrep_rd(&FABints, h);
91
dpd_buf4_mat_irrep_init(&FBAints, h);
92
dpd_buf4_mat_irrep_rd(&FBAints, h);
94
dpd_buf4_mat_irrep_init(&EAAints, h);
95
dpd_buf4_mat_irrep_rd(&EAAints, h);
97
dpd_buf4_mat_irrep_init(&EABints, h);
98
dpd_buf4_mat_irrep_rd(&EABints, h);
100
dpd_buf4_mat_irrep_init(&EBAints, h);
101
dpd_buf4_mat_irrep_rd(&EBAints, h);
103
dpd_buf4_mat_irrep_init(&DAAints, h);
104
dpd_buf4_mat_irrep_rd(&DAAints, h);
106
dpd_buf4_mat_irrep_init(&DABints, h);
107
dpd_buf4_mat_irrep_rd(&DABints, h);
113
for(Gi=0; Gi < nirreps; Gi++) {
114
for(Gj=0; Gj < nirreps; Gj++) {
115
for(Gk=0; Gk < nirreps; Gk++) {
121
for(i=0; i < aoccpi[Gi]; i++) {
122
I = aocc_off[Gi] + i;
123
for(j=0; j < aoccpi[Gj]; j++) {
124
J = aocc_off[Gj] + j;
125
for(k=0; k < boccpi[Gk]; k++) {
126
K = bocc_off[Gk] + k;
130
ij = EAAints.params->rowidx[I][J];
131
ji = EAAints.params->rowidx[J][I];
132
jk = EABints.params->rowidx[J][K];
133
kj = EBAints.params->rowidx[K][J];
134
ik = EABints.params->rowidx[I][K];
135
ki = EBAints.params->rowidx[K][I];
137
for(Ga=0; Ga < nirreps; Ga++) {
138
for(Gb=0; Gb < nirreps; Gb++) {
139
Gc = Gi ^ Gj ^ Gk ^ Ga ^ Gb;
145
for(a=0; a < avirtpi[Ga]; a++) {
146
A = avir_off[Ga] + a;
147
for(b=0; b < avirtpi[Gb]; b++) {
148
B = avir_off[Gb] + b;
149
for(c=0; c < bvirtpi[Gc]; c++) {
150
C = bvir_off[Gc] + c;
154
ab = FAAints.params->colidx[A][B];
155
ba = FAAints.params->colidx[B][A];
156
bc = FABints.params->colidx[B][C];
157
cb = FBAints.params->colidx[C][B];
158
ac = FABints.params->colidx[A][C];
159
ca = FBAints.params->colidx[C][A];
163
/** <ov||vv> --> connected triples **/
165
/* -t_JkAe * F_IeBc */
167
for(e=0; e < bvirtpi[Ge]; e++) {
168
E = bvir_off[Ge] + e;
170
ae = T2AB.params->colidx[A][E];
171
ie = FABints.params->rowidx[I][E];
173
t_jkae = F_iebc = 0.0;
175
if(T2AB.params->rowtot[Gjk] && T2AB.params->coltot[Gjk])
176
t_jkae = T2AB.matrix[Gjk][jk][ae];
178
if(FABints.params->rowtot[Gbc] && FABints.params->coltot[Gbc])
179
F_iebc = FABints.matrix[Gbc][ie][bc];
181
value_c -= t_jkae * F_iebc;
184
/* +t_JkBe * F_IeAc */
186
for(e=0; e < bvirtpi[Ge]; e++) {
187
E = bvir_off[Ge] + e;
189
be = T2AB.params->colidx[B][E];
190
ie = FABints.params->rowidx[I][E];
192
t_jkbe = F_ieac = 0.0;
194
if(T2AB.params->rowtot[Gjk] && T2AB.params->coltot[Gjk])
195
t_jkbe = T2AB.matrix[Gjk][jk][be];
197
if(FABints.params->rowtot[Gac] && FABints.params->coltot[Gac])
198
F_ieac = FABints.matrix[Gac][ie][ac];
200
value_c += t_jkbe * F_ieac;
203
/* +t_JkEc * F_IEAB */
205
for(e=0; e < avirtpi[Ge]; e++) {
206
E = avir_off[Ge] + e;
208
ec = T2AB.params->colidx[E][C];
209
ie = FAAints.params->rowidx[I][E];
211
t_jkec = F_ieab = 0.0;
213
if(T2AB.params->rowtot[Gjk] && T2AB.params->coltot[Gjk])
214
t_jkec = T2AB.matrix[Gjk][jk][ec];
216
if(FAAints.params->rowtot[Gba] && FAAints.params->coltot[Gba])
217
F_ieab = FAAints.matrix[Gba][ie][ab];
219
value_c += t_jkec * F_ieab;
222
/* +t_IkAe * F_JeBc */
224
for(e=0; e < bvirtpi[Ge]; e++) {
225
E = bvir_off[Ge] + e;
227
ae = T2AB.params->colidx[A][E];
228
je = FABints.params->rowidx[J][E];
230
t_ikae = F_jebc = 0.0;
232
if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik])
233
t_ikae = T2AB.matrix[Gik][ik][ae];
235
if(FABints.params->rowtot[Gbc] && FABints.params->coltot[Gbc])
236
F_jebc = FABints.matrix[Gbc][je][bc];
238
value_c += t_ikae * F_jebc;
241
/* -t_IkBe * F_JeAc */
243
for(e=0; e < bvirtpi[Ge]; e++) {
244
E = bvir_off[Ge] + e;
246
be = T2AB.params->colidx[B][E];
247
je = FABints.params->rowidx[J][E];
249
t_ikbe = F_jeac = 0.0;
251
if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik])
252
t_ikbe = T2AB.matrix[Gik][ik][be];
254
if(FABints.params->rowtot[Gac] && FABints.params->coltot[Gac])
255
F_jeac = FABints.matrix[Gac][je][ac];
257
value_c -= t_ikbe * F_jeac;
260
/* -t_IkEc * F_JEAB */
262
for(e=0; e < avirtpi[Ge]; e++) {
263
E = avir_off[Ge] + e;
265
ec = T2AB.params->colidx[E][C];
266
je = FAAints.params->rowidx[J][E];
268
t_ikec = F_jeab = 0.0;
270
if(T2AB.params->rowtot[Gik] && T2AB.params->coltot[Gik])
271
t_ikec = T2AB.matrix[Gik][ik][ec];
273
if(FAAints.params->rowtot[Gba] && FAAints.params->coltot[Gba])
274
F_jeab = FAAints.matrix[Gba][je][ab];
276
value_c -= t_ikec * F_jeab;
279
/* +t_IJAE * F_kEcB */
281
for(e=0; e < avirtpi[Ge]; e++) {
282
E = avir_off[Ge] + e;
284
ae = T2AA.params->colidx[A][E];
285
ke = FBAints.params->rowidx[K][E];
287
t_ijae = F_kecb = 0.0;
289
if(T2AA.params->rowtot[Gij] && T2AA.params->coltot[Gij])
290
t_ijae = T2AA.matrix[Gij][ij][ae];
292
if(FBAints.params->rowtot[Gbc] && FBAints.params->coltot[Gbc])
293
F_kecb = FBAints.matrix[Gbc][ke][cb];
295
value_c += t_ijae * F_kecb;
298
/* -t_IJBE * F_kEcA */
300
for(e=0; e < avirtpi[Ge]; e++) {
301
E = avir_off[Ge] + e;
303
be = T2AA.params->colidx[B][E];
304
ke = FBAints.params->rowidx[K][E];
306
t_ijbe = F_keca = 0.0;
308
if(T2AA.params->rowtot[Gij] && T2AA.params->coltot[Gij])
309
t_ijbe = T2AA.matrix[Gij][ij][be];
311
if(FBAints.params->rowtot[Gac] && FBAints.params->coltot[Gac])
312
F_keca = FBAints.matrix[Gac][ke][ca];
314
value_c -= t_ijbe * F_keca;
317
/** <oo||ov> --> connected triples **/
319
/* +t_ImBc * E_kJmA */
321
for(m=0; m < boccpi[Gm]; m++) {
322
M = bocc_off[Gm] + m;
324
im = T2AB.params->rowidx[I][M];
325
ma = EBAints.params->colidx[M][A];
327
t_imbc = E_kjma = 0.0;
329
if(T2AB.params->rowtot[Gbc] && T2AB.params->coltot[Gbc])
330
t_imbc = T2AB.matrix[Gbc][im][bc];
332
if(EBAints.params->rowtot[Gjk] && EBAints.params->coltot[Gjk])
333
E_kjma = EBAints.matrix[Gjk][kj][ma];
335
value_c += t_imbc * E_kjma;
338
/* -t_ImAc * E_kJmB */
340
for(m=0; m < boccpi[Gm]; m++) {
341
M = bocc_off[Gm] + m;
343
im = T2AB.params->rowidx[I][M];
344
mb = EBAints.params->colidx[M][B];
346
t_imac = E_kjmb = 0.0;
348
if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac])
349
t_imac = T2AB.matrix[Gac][im][ac];
351
if(EBAints.params->rowtot[Gjk] && EBAints.params->coltot[Gjk])
352
E_kjmb = EBAints.matrix[Gjk][kj][mb];
354
value_c -= t_imac * E_kjmb;
357
/* +t_IMBA * E_JkMc */
359
for(m=0; m < aoccpi[Gm]; m++) {
360
M = aocc_off[Gm] + m;
362
im = T2AA.params->rowidx[I][M];
363
mc = EABints.params->colidx[M][C];
365
t_imba = E_jkmc = 0.0;
367
if(T2AA.params->rowtot[Gba] && T2AA.params->coltot[Gba])
368
t_imba = T2AA.matrix[Gba][im][ba];
370
if(EABints.params->rowtot[Gjk] && EABints.params->coltot[Gjk])
371
E_jkmc = EABints.matrix[Gjk][jk][mc];
373
value_c += t_imba * E_jkmc;
376
/* -t_JmBc * E_kImA */
378
for(m=0; m < boccpi[Gm]; m++) {
379
M = bocc_off[Gm] + m;
381
jm = T2AB.params->rowidx[J][M];
382
ma = EBAints.params->colidx[M][A];
384
t_jmbc = E_kima = 0.0;
386
if(T2AB.params->rowtot[Gbc] && T2AB.params->coltot[Gbc])
387
t_jmbc = T2AB.matrix[Gbc][jm][bc];
389
if(EBAints.params->rowtot[Gik] && EBAints.params->coltot[Gik])
390
E_kima = EBAints.matrix[Gik][ki][ma];
392
value_c -= t_jmbc * E_kima;
395
/* +t_JmAc * E_kImB */
397
for(m=0; m < boccpi[Gm]; m++) {
398
M = bocc_off[Gm] + m;
400
jm = T2AB.params->rowidx[J][M];
401
mb = EBAints.params->colidx[M][B];
403
t_jmac = E_kimb = 0.0;
405
if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac])
406
t_jmac = T2AB.matrix[Gac][jm][ac];
408
if(EBAints.params->rowtot[Gik] && EBAints.params->coltot[Gik])
409
E_kimb = EBAints.matrix[Gik][ki][mb];
411
value_c += t_jmac * E_kimb;
414
/* -t_JMBA * E_IkMc */
416
for(m=0; m < aoccpi[Gm]; m++) {
417
M = aocc_off[Gm] + m;
419
jm = T2AA.params->rowidx[J][M];
420
mc = EABints.params->colidx[M][C];
422
t_jmba = E_ikmc = 0.0;
424
if(T2AA.params->rowtot[Gba] && T2AA.params->coltot[Gba])
425
t_jmba = T2AA.matrix[Gba][jm][ba];
427
if(EABints.params->rowtot[Gik] && EABints.params->coltot[Gik])
428
E_ikmc = EABints.matrix[Gik][ik][mc];
430
value_c -= t_jmba * E_ikmc;
433
/* -t_MkBc * E_JIMA */
435
for(m=0; m < aoccpi[Gm]; m++) {
436
M = aocc_off[Gm] + m;
438
mk = T2AB.params->rowidx[M][K];
439
ma = EAAints.params->colidx[M][A];
441
t_mkbc = E_jima = 0.0;
443
if(T2AB.params->rowtot[Gbc] && T2AB.params->coltot[Gbc])
444
t_mkbc = T2AB.matrix[Gbc][mk][bc];
446
if(EAAints.params->rowtot[Gji] && EAAints.params->coltot[Gji])
447
E_jima = EAAints.matrix[Gji][ji][ma];
449
value_c -= t_mkbc * E_jima;
452
/* +t_MkAc * E_JIMB */
454
for(m=0; m < aoccpi[Gm]; m++) {
455
M = aocc_off[Gm] + m;
457
mk = T2AB.params->rowidx[M][K];
458
mb = EAAints.params->colidx[M][B];
460
t_mkac = E_jimb = 0.0;
462
if(T2AB.params->rowtot[Gac] && T2AB.params->coltot[Gac])
463
t_mkac = T2AB.matrix[Gac][mk][ac];
465
if(EAAints.params->rowtot[Gji] && EAAints.params->coltot[Gji])
466
E_jimb = EAAints.matrix[Gji][ji][mb];
468
value_c += t_mkac * E_jimb;
471
/** disconnected triples **/
476
if(Gi == Ga && Gjk == Gbc) {
479
if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi])
480
t_ia = T1A.matrix[Gi][i][a];
482
if(DABints.params->rowtot[Gjk] && DABints.params->coltot[Gjk])
483
D_jkbc = DABints.matrix[Gjk][jk][bc];
485
value_d += t_ia * D_jkbc;
489
if(Gi == Gb && Gjk == Gac) {
492
if(T1A.params->rowtot[Gi] && T1A.params->coltot[Gi])
493
t_ib = T1A.matrix[Gi][i][b];
495
if(DABints.params->rowtot[Gjk] && DABints.params->coltot[Gjk])
496
D_jkac = DABints.matrix[Gjk][jk][ac];
498
value_d -= t_ib * D_jkac;
502
if(Gj == Ga && Gik == Gbc) {
505
if(T1A.params->rowtot[Gj] && T1A.params->coltot[Gj])
506
t_ja = T1A.matrix[Gj][j][a];
508
if(DABints.params->rowtot[Gik] && DABints.params->coltot[Gik])
509
D_ikbc = DABints.matrix[Gik][ik][bc];
511
value_d -= t_ja * D_ikbc;
515
if(Gj == Gb && Gik == Gac) {
518
if(T1A.params->rowtot[Gj] && T1A.params->coltot[Gj])
519
t_jb = T1A.matrix[Gj][j][b];
521
if(DABints.params->rowtot[Gik] && DABints.params->coltot[Gik])
522
D_ikac = DABints.matrix[Gik][ik][ac];
524
value_d += t_jb * D_ikac;
528
if(Gk == Gc && Gji == Gba) {
531
if(T1B.params->rowtot[Gk] && T1B.params->coltot[Gk])
532
t_kc = T1B.matrix[Gk][k][c];
534
if(DAAints.params->rowtot[Gji] && DAAints.params->coltot[Gji])
535
D_jiba = DAAints.matrix[Gji][ji][ba];
537
value_d += t_kc * D_jiba;
541
if(fabs(value_c) > 1e-7) {
543
fprintf(outfile, "%d %d %d %d %d %d %20.14f\n", I, J, K, A, B, C, value_c);
547
/* Compute the Fock denominator */
549
if(fIJ.params->rowtot[Gi])
550
denom += fIJ.matrix[Gi][i][i];
551
if(fIJ.params->rowtot[Gj])
552
denom += fIJ.matrix[Gj][j][j];
553
if(fij.params->rowtot[Gk])
554
denom += fij.matrix[Gk][k][k];
555
if(fAB.params->rowtot[Ga])
556
denom -= fAB.matrix[Ga][a][a];
557
if(fAB.params->rowtot[Gb])
558
denom -= fAB.matrix[Gb][b][b];
559
if(fab.params->rowtot[Gc])
560
denom -= fab.matrix[Gc][c][c];
563
if(fabs(value_c) > 1e-7)
564
fprintf(outfile, "%d %d %d %d %d %d %20.15f\n", I,J,K,A,B,C,value_c);
567
ET_AAB += (value_d + value_c) * value_c / denom;
590
/* fprintf(outfile, "cnt = %d\n", cnt); */
591
/* fprintf(outfile, "ET_AAB = %20.14f\n", ET_AAB); */
593
for(h=0; h < nirreps; h++) {
594
dpd_buf4_mat_irrep_close(&T2AA, h);
595
dpd_buf4_mat_irrep_close(&T2AB, h);
596
dpd_buf4_mat_irrep_close(&FAAints, h);
597
dpd_buf4_mat_irrep_close(&FABints, h);
598
dpd_buf4_mat_irrep_close(&FBAints, h);
599
dpd_buf4_mat_irrep_close(&EAAints, h);
600
dpd_buf4_mat_irrep_close(&EABints, h);
601
dpd_buf4_mat_irrep_close(&EBAints, h);
602
dpd_buf4_mat_irrep_close(&DAAints, h);
603
dpd_buf4_mat_irrep_close(&DABints, h);
606
dpd_buf4_close(&T2AA);
607
dpd_buf4_close(&T2AB);
608
dpd_buf4_close(&FAAints);
609
dpd_buf4_close(&FABints);
610
dpd_buf4_close(&FBAints);
611
dpd_buf4_close(&EAAints);
612
dpd_buf4_close(&EABints);
613
dpd_buf4_close(&EBAints);
614
dpd_buf4_close(&DAAints);
615
dpd_buf4_close(&DABints);
617
dpd_file2_mat_close(&T1A);
618
dpd_file2_close(&T1A);
619
dpd_file2_mat_close(&T1B);
620
dpd_file2_close(&T1B);
622
dpd_file2_mat_close(&fIJ);
623
dpd_file2_mat_close(&fij);
624
dpd_file2_mat_close(&fAB);
625
dpd_file2_mat_close(&fab);
626
dpd_file2_close(&fIJ);
627
dpd_file2_close(&fij);
628
dpd_file2_close(&fAB);
629
dpd_file2_close(&fab);