3
\brief Enter brief description of file here
6
/* T3_UHF_AAA(): Computes all connected and disconnected T3(IJK,ABC)
7
** amplitudes for a given I, J, K combination for input C2, F, and E
8
** intermediates. This function will work for AAA or BBB spin cases,
9
** with either RHF/ROHF or UHF orbitals.
13
** double ***W: The target connected triples amplitudes in an
14
** nirreps x AB x C array. The memory for this must be allocated
17
** double ***V: The target disconnected triples amplitudes (if
18
** requested) in an nirreps x AB x C array. The memory for this
19
** must be allocated externally.
21
** int disc: Boolean: 1 == computed disconnected triples; 0 == don't
23
** int nirreps: Number of irreps.
25
** int I: Absolute index of orbital I.
27
** int Gi: Irrep of I.
29
** int J: Absolute index of orbital J.
31
** int Gj: Irrep of J.
33
** int K: Absolute index of orbital K.
35
** int Gk: Irrep of K.
37
** dpdbuf4 *C2: Pointer to dpd buffer for double excitation amps,
40
** dpdbuf4 *F: Pointer to dpd buffer for three-virtual-index
41
** intermediate, ordered (IA,BC).
43
** dpdbuf4 *E: Pointer to dpd buffer for three-occupied-index
44
** intermediate, ordered (IJ,KA).
46
** dpdfile *C1: If disconnected T3's are requested, pointer to dpd
47
** buffer for single-excitation amps.
49
** dpdbuf4 *D: If disconnected T3's are requested, pointer to dpd
50
** buffer for <IJ||ab> integrals.
52
** dpdfile2 *fIA: Pointer to the dpd file2 for the occ-vir block of
53
** the Fock matrix (or other appropriate one-electron operator).
55
** dpdfile2 *fIJ: Pointer to the dpd file2 for the occ-occ block of
56
** the Fock matrix (or other appropriate one-electron operator).
58
** dpdfile2 *fAB: Pointer to the dpd file2 for the vir-vir block of
59
** the Fock matrix (or other appropriate one-electron operator).
61
** int *occpi: Number of occupied orbitals per irrep lookup array.
63
** int *occ_off: Offset lookup for translating between absolute and
64
** relative orbital indices for occupied space.
66
** int *virtpi: Number of virtual orbitals per irrep lookup array.
68
** int *vir_off: Offset lookup for translating between absolute and
69
** relative orbital indices for virtual space.
71
** double omega: a constant to add to the final denominators -
75
** Modified to return disconnected triples, TDC, Feburary 2008
83
#include <libdpd/dpd.h>
86
namespace psi { namespace cctriples {
88
void T3_UHF_AAA(double ***W, double ***V, int disc, int nirreps, int I, int Gi, int J, int Gj, int K, int Gk,
89
dpdbuf4 *C2, dpdbuf4 *F, dpdbuf4 *E, dpdfile2 *C1, dpdbuf4 *D, dpdfile2 *fIA, dpdfile2 *fIJ, dpdfile2 *fAB,
90
int *occpi, int *occ_off, int *virtpi, int *vir_off, double omega)
94
int ij, ji, ik, ki, jk, kj;
95
int Gij, Gji, Gik, Gki, Gjk, Gkj, Gijk;
99
int Gab, Gcb, Gca, Gbc, Gac;
102
int a, b, c, A, B, C;
108
int nrows, ncols, nlinks;
112
double t_ia, t_ib, t_ic, t_ja, t_jb, t_jc, t_ka, t_kb, t_kc;
113
double f_ia, f_ib, f_ic, f_ja, f_jb, f_jc, f_ka, f_kb, f_kc;
114
double t_jkbc, t_jkac, t_jkba, t_ikbc, t_ikac, t_ikba, t_jibc, t_jiac, t_jiba;
115
double D_jkbc, D_jkac, D_jkba, D_ikbc, D_ikac, D_ikba, D_jibc, D_jiac, D_jiba;
117
GC = C2->file.my_irrep;
118
/* F and E are assumed to have same irrep */
119
GF = GE = F->file.my_irrep;
122
dpd_file2_mat_init(C1);
123
dpd_file2_mat_rd(C1);
125
dpd_file2_mat_init(fIJ);
126
dpd_file2_mat_init(fAB);
127
dpd_file2_mat_init(fIA);
128
dpd_file2_mat_rd(fIJ);
129
dpd_file2_mat_rd(fAB);
130
dpd_file2_mat_rd(fIA);
132
for(h=0; h < nirreps; h++) {
133
dpd_buf4_mat_irrep_init(C2, h);
134
dpd_buf4_mat_irrep_rd(C2, h);
137
dpd_buf4_mat_irrep_init(D, h);
138
dpd_buf4_mat_irrep_rd(D, h);
141
dpd_buf4_mat_irrep_init(E, h);
142
dpd_buf4_mat_irrep_rd(E, h);
154
ij = C2->params->rowidx[I][J];
155
ji = C2->params->rowidx[J][I];
156
jk = C2->params->rowidx[J][K];
157
kj = C2->params->rowidx[K][J];
158
ik = C2->params->rowidx[I][K];
159
ki = C2->params->rowidx[K][I];
162
if(fIJ->params->rowtot[Gi]) dijk += fIJ->matrix[Gi][i][i];
163
if(fIJ->params->rowtot[Gj]) dijk += fIJ->matrix[Gj][j][j];
164
if(fIJ->params->rowtot[Gk]) dijk += fIJ->matrix[Gk][k][k];
166
W2 = (double ***) malloc(nirreps * sizeof(double **));
168
for(Gab=0; Gab < nirreps; Gab++) {
169
Gc = Gab ^ Gijk ^ GX3; /* changed */
171
W2[Gab] = dpd_block_matrix(F->params->coltot[Gab], virtpi[Gc]);
173
if(F->params->coltot[Gab] && virtpi[Gc]) {
174
memset(W[Gab][0], 0, F->params->coltot[Gab]*virtpi[Gc]*sizeof(double));
175
if(disc) memset(V[Gab][0], 0, F->params->coltot[Gab]*virtpi[Gc]*sizeof(double));
179
for(Gd=0; Gd < nirreps; Gd++) {
181
/* +t_kjcd * F_idab */
183
Gab = Gid ^ GF; /* changed */
185
Gc = Gjk ^ Gd ^ GC; /* changed */
187
cd = C2->col_offset[Gjk][Gc];
188
id = F->row_offset[Gid][I];
190
F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid^GF]);
191
dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]);
193
nrows = F->params->coltot[Gid^GF];
197
if(nrows && ncols && nlinks)
198
C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gid][0], nrows,
199
&(C2->matrix[Gjk][kj][cd]), nlinks, 1.0, W[Gab][0], ncols);
201
dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid^GF]);
203
/* +t_ikcd * F_jdab */
205
Gab = Gjd ^ GF; /* changed */
206
Gc = Gik ^ Gd ^ GC; /* changed */
208
cd = C2->col_offset[Gik][Gc];
209
jd = F->row_offset[Gjd][J];
211
F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd^GF]);
212
dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]);
214
nrows = F->params->coltot[Gjd^GF];
218
if(nrows && ncols && nlinks)
219
C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gjd][0], nrows,
220
&(C2->matrix[Gik][ik][cd]), nlinks, 1.0, W[Gab][0], ncols);
222
dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd^GF]);
224
/* -t_ijcd * F_kdab */
225
Gkd = Gk ^ Gd; /*changed */
229
cd = C2->col_offset[Gij][Gc];
230
kd = F->row_offset[Gkd][K];
232
F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd^GF]);
233
dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]);
235
nrows = F->params->coltot[Gkd^GF];
239
if(nrows && ncols && nlinks)
240
C_DGEMM('t', 't', nrows, ncols, nlinks, -1.0, F->matrix[Gkd][0], nrows,
241
&(C2->matrix[Gij][ij][cd]), nlinks, 1.0, W[Gab][0], ncols);
243
dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd^GF]);
247
for(Gl=0; Gl < nirreps; Gl++) {
249
/* -t_ilab * E_jklc */
250
Gil = Gi ^ Gl; /* changed */
254
lc = E->col_offset[Gjk][Gl];
255
il = C2->row_offset[Gil][I];
257
nrows = C2->params->coltot[Gil^GC];
261
if(nrows && ncols && nlinks)
262
C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, C2->matrix[Gil][il], nrows,
263
&(E->matrix[Gjk][jk][lc]), ncols, 1.0, W[Gab][0], ncols);
265
/* +t_jlab * E_iklc */
266
Gjl = Gj ^ Gl; /* changed */
270
lc = E->col_offset[Gik][Gl];
271
jl = C2->row_offset[Gjl][J];
273
nrows = C2->params->coltot[Gjl^GC];
277
if(nrows && ncols && nlinks)
278
C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gjl][jl], nrows,
279
&(E->matrix[Gik][ik][lc]), ncols, 1.0, W[Gab][0], ncols);
281
/* +t_klab * E_jilc */
282
Gkl = Gk ^ Gl; /* changed! */
286
lc = E->col_offset[Gji][Gl];
287
kl = C2->row_offset[Gkl][K];
289
nrows = C2->params->coltot[Gkl^GC];
293
if(nrows && ncols && nlinks)
294
C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gkl][kl], nrows,
295
&(E->matrix[Gji][ji][lc]), ncols, 1.0, W[Gab][0], ncols);
299
for(Gd=0; Gd < nirreps; Gd++) {
300
/* +t_kjbd * F_idca */
301
Gid = Gi ^ Gd; /* changed */
305
bd = C2->col_offset[Gjk][Gb];
306
id = F->row_offset[Gid][I];
308
F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid^GF]);
309
dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]);
311
nrows = F->params->coltot[Gid^GF];
315
if(nrows && ncols && nlinks)
316
C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gid][0], nrows,
317
&(C2->matrix[Gjk][kj][bd]), nlinks, 1.0, W2[Gca][0], ncols);
319
dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid^GF]);
321
/* +t_ikbd * F_jdca */
326
bd = C2->col_offset[Gik][Gb];
327
jd = F->row_offset[Gjd][J];
329
F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd^GF]);
330
dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]);
332
nrows = F->params->coltot[Gjd^GF];
336
if(nrows && ncols && nlinks)
337
C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gjd][0], nrows,
338
&(C2->matrix[Gik][ik][bd]), nlinks, 1.0, W2[Gca][0], ncols);
340
dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd^GF]);
342
/* -t_ijbd * F_kdca */
347
bd = C2->col_offset[Gij][Gb];
348
kd = F->row_offset[Gkd][K];
350
F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd^GF]);
351
dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]);
353
nrows = F->params->coltot[Gkd^GF];
357
if(nrows && ncols && nlinks)
358
C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gkd][0], nrows,
359
&(C2->matrix[Gij][ij][bd]), nlinks, 1.0, W2[Gca][0], ncols);
361
dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd^GF]);
364
for(Gl=0; Gl < nirreps; Gl++) {
365
/* -t_ilca * E_jklb */
370
lb = E->col_offset[Gjk][Gl];
371
il = C2->row_offset[Gil][I];
373
nrows = C2->params->coltot[Gil^GC];
377
if(nrows && ncols && nlinks)
378
C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, C2->matrix[Gil][il], nrows,
379
&(E->matrix[Gjk][jk][lb]), ncols, 1.0, W2[Gca][0], ncols);
381
/* +t_jlca * E_iklb */
386
lb = E->col_offset[Gik][Gl];
387
jl = C2->row_offset[Gjl][J];
389
nrows = C2->params->coltot[Gjl^GC];
393
if(nrows && ncols && nlinks)
394
C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gjl][jl], nrows,
395
&(E->matrix[Gik][ik][lb]), ncols, 1.0, W2[Gca][0], ncols);
397
/* +t_klca * E_jilb */
402
lb = E->col_offset[Gji][Gl];
403
kl = C2->row_offset[Gkl][K];
405
nrows = C2->params->coltot[Gkl^GC];
409
if(nrows && ncols && nlinks)
410
C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gkl][kl], nrows,
411
&(E->matrix[Gji][ji][lb]), ncols, 1.0, W2[Gca][0], ncols);
414
dpd_3d_sort(W2, W, nirreps, Gijk^GX3, F->params->coltot, F->params->colidx,
415
F->params->colorb, F->params->rsym, F->params->ssym, vir_off,
416
vir_off, virtpi, vir_off, F->params->colidx, bca, 1);
418
for(Gab=0; Gab < nirreps; Gab++) {
419
Gc = Gab ^ Gijk ^ GX3; /* changed */
420
if(F->params->coltot[Gab] && virtpi[Gc]) {
421
memset(W2[Gab][0], 0, F->params->coltot[Gab]*virtpi[Gc]*sizeof(double));
425
for(Gd=0; Gd < nirreps; Gd++) {
426
/* -t_kjad * F_idcb */
431
ad = C2->col_offset[Gkj][Ga];
432
id = F->row_offset[Gid][I];
434
F->matrix[Gid] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gid^GF]);
435
dpd_buf4_mat_irrep_rd_block(F, Gid, id, virtpi[Gd]);
437
nrows = F->params->coltot[Gid^GF];
441
if(nrows && ncols && nlinks)
442
C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gid][0], nrows,
443
&(C2->matrix[Gkj][kj][ad]), nlinks, 1.0, W2[Gcb][0], ncols);
445
dpd_free_block(F->matrix[Gid], virtpi[Gd], F->params->coltot[Gid^GF]);
447
/* -t_ikad * F_jdcb */
452
ad = C2->col_offset[Gik][Ga];
453
jd = F->row_offset[Gjd][J];
455
F->matrix[Gjd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gjd^GF]);
456
dpd_buf4_mat_irrep_rd_block(F, Gjd, jd, virtpi[Gd]);
458
nrows = F->params->coltot[Gjd^GF];
462
if(nrows && ncols && nlinks)
463
C_DGEMM('t','t',nrows, ncols, nlinks, -1.0, F->matrix[Gjd][0], nrows,
464
&(C2->matrix[Gik][ik][ad]), nlinks, 1.0, W2[Gcb][0], ncols);
466
dpd_free_block(F->matrix[Gjd], virtpi[Gd], F->params->coltot[Gjd^GF]);
468
/* +t_ijad * F_kdcb */
473
ad = C2->col_offset[Gij][Ga];
474
kd = F->row_offset[Gkd][K];
476
F->matrix[Gkd] = dpd_block_matrix(virtpi[Gd], F->params->coltot[Gkd^GF]);
477
dpd_buf4_mat_irrep_rd_block(F, Gkd, kd, virtpi[Gd]);
479
nrows = F->params->coltot[Gkd^GF];
483
if(nrows && ncols && nlinks)
484
C_DGEMM('t','t',nrows, ncols, nlinks, 1.0, F->matrix[Gkd][0], nrows,
485
&(C2->matrix[Gij][ij][ad]), nlinks, 1.0, W2[Gcb][0], ncols);
487
dpd_free_block(F->matrix[Gkd], virtpi[Gd], F->params->coltot[Gkd^GF]);
491
for(Gl=0; Gl < nirreps; Gl++) {
492
/* +t_ilcb * E_jkla */
497
la = E->col_offset[Gjk][Gl];
498
il = C2->row_offset[Gil][I];
500
nrows = C2->params->coltot[Gil^GC];
504
if(nrows && ncols && nlinks)
505
C_DGEMM('t', 'n', nrows, ncols, nlinks, 1.0, C2->matrix[Gil][il], nrows,
506
&(E->matrix[Gjk][jk][la]), ncols, 1.0, W2[Gcb][0], ncols);
508
/* -t_jlcb * E_ikla */
513
la = E->col_offset[Gik][Gl];
514
jl = C2->row_offset[Gjl][J];
516
nrows = C2->params->coltot[Gjl^GC];
520
if(nrows && ncols && nlinks)
521
C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, C2->matrix[Gjl][jl], nrows,
522
&(E->matrix[Gik][ik][la]), ncols, 1.0, W2[Gcb][0], ncols);
524
/* -t_klcb * E_jila */
529
la = E->col_offset[Gji][Gl];
530
kl = C2->row_offset[Gkl][K];
532
nrows = C2->params->coltot[Gkl^GC];
536
if(nrows && ncols && nlinks)
537
C_DGEMM('t', 'n', nrows, ncols, nlinks, -1.0, C2->matrix[Gkl][kl], nrows,
538
&(E->matrix[Gji][ji][la]), ncols, 1.0, W2[Gcb][0], ncols);
542
dpd_3d_sort(W2, W, nirreps, Gijk^GX3, F->params->coltot, F->params->colidx,
543
F->params->colorb, F->params->rsym, F->params->ssym, vir_off,
544
vir_off, virtpi, vir_off, F->params->colidx, cba, 1);
546
/**** Compute disconnected T3s for given ijk ****/
548
for(Gab=0; Gab < nirreps; Gab++) {
551
for(ab=0; ab < F->params->coltot[Gab]; ab++) {
552
A = F->params->colorb[Gab][ab][0];
553
Ga = F->params->rsym[A];
555
B = F->params->colorb[Gab][ab][1];
556
Gb = F->params->ssym[B];
562
for(c=0; c < virtpi[Gc]; c++) {
565
bc = D->params->colidx[B][C];
566
ac = D->params->colidx[A][C];
568
/* +t_ia * D_jkbc + f_ia * t_jkbc */
569
if(Gi == Ga && Gjk == Gbc) {
570
t_ia = D_jkbc = f_ia = t_jkbc = 0.0;
572
if(C1->params->rowtot[Gi] && C1->params->coltot[Gi]) {
573
t_ia = C1->matrix[Gi][i][a];
574
f_ia = fIA->matrix[Gi][i][a];
577
if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) {
578
D_jkbc = D->matrix[Gjk][jk][bc];
579
t_jkbc = C2->matrix[Gjk][jk][bc];
582
V[Gab][ab][c] += t_ia * D_jkbc + f_ia * t_jkbc;
585
/* -t_ib * D_jkac - f_ib * t_jkac */
586
if(Gi == Gb && Gjk == Gac) {
587
t_ib = D_jkac = f_ib = t_jkac = 0.0;
589
if(C1->params->rowtot[Gi] && C1->params->coltot[Gi]) {
590
t_ib = C1->matrix[Gi][i][b];
591
f_ib = fIA->matrix[Gi][i][b];
594
if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) {
595
D_jkac = D->matrix[Gjk][jk][ac];
596
t_jkac = C2->matrix[Gjk][jk][ac];
599
V[Gab][ab][c] -= t_ib * D_jkac + f_ib * t_jkac;
602
/* +t_ic * D_jkab + f_ic * t_jkba */
603
if(Gi == Gc && Gjk == Gab) {
604
t_ic = D_jkba = f_ic = t_jkba = 0.0;
606
if(C1->params->rowtot[Gi] && C1->params->coltot[Gi]) {
607
t_ic = C1->matrix[Gi][i][c];
608
f_ic = fIA->matrix[Gi][i][c];
611
if(D->params->rowtot[Gjk] && D->params->coltot[Gjk]) {
612
D_jkba = D->matrix[Gjk][jk][ab];
613
t_jkba = C2->matrix[Gjk][jk][ab];
616
V[Gab][ab][c] += t_ic * D_jkba + f_ic * t_jkba;
619
/* -t_ja * D_ikbc - f_ja * t_ikbc*/
620
if(Gj == Ga && Gik == Gbc) {
621
t_ja = D_ikbc = f_ja = t_ikbc = 0.0;
623
if(C1->params->rowtot[Gj] && C1->params->coltot[Gj]) {
624
t_ja = C1->matrix[Gj][j][a];
625
f_ja = fIA->matrix[Gj][j][a];
628
if(D->params->rowtot[Gik] && D->params->coltot[Gik]) {
629
D_ikbc = D->matrix[Gik][ik][bc];
630
t_ikbc = C2->matrix[Gik][ik][bc];
633
V[Gab][ab][c] -= t_ja * D_ikbc + f_ja * t_ikbc;
636
/* +t_jb * D_ikac + f_jb * t_ikac */
637
if(Gj == Gb && Gik == Gac) {
638
t_jb = D_ikac = f_jb = t_ikac = 0.0;
640
if(C1->params->rowtot[Gj] && C1->params->coltot[Gj]) {
641
t_jb = C1->matrix[Gj][j][b];
642
f_jb = fIA->matrix[Gj][j][b];
645
if(D->params->rowtot[Gik] && D->params->coltot[Gik]) {
646
D_ikac = D->matrix[Gik][ik][ac];
647
t_ikac = C2->matrix[Gik][ik][ac];
650
V[Gab][ab][c] += t_jb * D_ikac + f_jb * t_ikac;
653
/* -t_jc * D_ikba - f_jc * t_ikba */
654
if(Gj == Gc && Gik == Gab) {
655
t_jc = D_ikba = f_jc = t_ikba = 0.0;
657
if(C1->params->rowtot[Gj] && C1->params->coltot[Gj]) {
658
t_jc = C1->matrix[Gj][j][c];
659
f_jc = fIA->matrix[Gj][j][c];
662
if(D->params->rowtot[Gik] && D->params->coltot[Gik]) {
663
D_ikba = D->matrix[Gik][ik][ab];
664
t_ikba = C2->matrix[Gik][ik][ab];
667
V[Gab][ab][c] -= t_jc * D_ikba + f_jc * t_ikba;
670
/* -t_ka * D_jibc - f_ka * t_jibc */
671
if(Gk == Ga && Gji == Gbc) {
672
t_ka = D_jibc = f_ka = t_jibc = 0.0;
674
if(C1->params->rowtot[Gk] && C1->params->coltot[Gk]) {
675
t_ka = C1->matrix[Gk][k][a];
676
f_ka = fIA->matrix[Gk][k][a];
679
if(D->params->rowtot[Gji] && D->params->coltot[Gji]) {
680
D_jibc = D->matrix[Gji][ji][bc];
681
t_jibc = C2->matrix[Gji][ji][bc];
684
V[Gab][ab][c] -= t_ka * D_jibc + f_ka * t_jibc;
687
/* +t_kb * D_jiac + f_kb * t_jiac */
688
if(Gk == Gb && Gji == Gac) {
689
t_kb = D_jiac = f_kb = t_jiac = 0.0;
691
if(C1->params->rowtot[Gk] && C1->params->coltot[Gk]) {
692
t_kb = C1->matrix[Gk][k][b];
693
f_kb = fIA->matrix[Gk][k][b];
696
if(D->params->rowtot[Gji] && D->params->coltot[Gji]) {
697
D_jiac = D->matrix[Gji][ji][ac];
698
t_jiac = C2->matrix[Gji][ji][ac];
701
V[Gab][ab][c] += t_kb * D_jiac + f_kb * t_jiac;
704
/* -t_kc * D_jiab - f_kc * t_jiba*/
705
if(Gk == Gc && Gji == Gab) {
706
t_kc = D_jiba = f_kc = t_jiba = 0.0;
708
if(C1->params->rowtot[Gk] && C1->params->coltot[Gk]) {
709
t_kc = C1->matrix[Gk][k][c];
710
f_kc = fIA->matrix[Gk][k][c];
713
if(D->params->rowtot[Gji] && D->params->coltot[Gji]) {
714
D_jiba = D->matrix[Gji][ji][ab];
715
t_jiba = C2->matrix[Gji][ji][ab];
718
V[Gab][ab][c] -= t_kc * D_jiba + f_kc * t_jiba;
726
} /**** Disconnected T3 complete ****/
728
for(Gab=0; Gab < nirreps; Gab++) {
729
Gc = Gab ^ Gijk ^ GX3; /* assumes totally symmetric! */
730
for(ab=0; ab < F->params->coltot[Gab]; ab++) {
731
A = F->params->colorb[Gab][ab][0];
732
Ga = F->params->rsym[A];
734
B = F->params->colorb[Gab][ab][1];
735
Gb = F->params->ssym[B];
738
for(c=0; c < virtpi[Gc]; c++) {
740
if(fAB->params->rowtot[Ga]) denom -= fAB->matrix[Ga][a][a];
741
if(fAB->params->rowtot[Gb]) denom -= fAB->matrix[Gb][b][b];
742
if(fAB->params->rowtot[Gc]) denom -= fAB->matrix[Gc][c][c];
744
W[Gab][ab][c] /= (omega + denom);
745
if(disc) V[Gab][ab][c] /= (omega + denom);
751
for(Gab=0; Gab < nirreps; Gab++) {
752
Gc = Gab ^ Gijk ^ GX3; /* changed */
753
dpd_free_block(W2[Gab], F->params->coltot[Gab], virtpi[Gc]);
757
dpd_file2_mat_close(fIJ);
758
dpd_file2_mat_close(fAB);
760
dpd_file2_mat_close(fIA);
761
dpd_file2_mat_close(C1);
764
for(h=0; h < nirreps; h++) {
765
dpd_buf4_mat_irrep_close(C2, h);
766
if(disc) dpd_buf4_mat_irrep_close(D, h);
767
dpd_buf4_mat_irrep_close(E, h);