5
#include <libciomr/libciomr.h>
6
#include <libdpd/dpd.h>
10
This function computes contributions to singles and doubles of
11
matrix elements of triples:
12
SIA <-- <S|(Dints) <T|(Wmbij,Wabei) CMNEF |0> |T> / (w-wt)
13
SIjAb <-- <D|(FME,WAmEf,WMnIe) <T|(Wmbij,Wabei) CMNEF |0> |T> / (w-wt)
14
These are used to make X3 quantity in T3_RHF:
15
CIjAb, WAbEi, WMbIj, fIJ, fAB, omega
18
void cc3_sigma_UHF_AAA(dpdbuf4 *CMNEF, dpdbuf4 *WABEI, dpdbuf4 *WMBIJ,
19
int do_singles, dpdbuf4 *Dints_anti, dpdfile2 *SIA, int do_doubles, dpdfile2 *FME,
20
dpdbuf4 *WMAFE, dpdbuf4 *WMNIE, dpdbuf4 *SIJAB, int *aoccpi, int *aocc_off,
21
int *avirtpi, int *avir_off, double omega, FILE *outfile)
24
int *occ_off, *occpi, *vir_off, *virtpi;
25
int Gi, Gj, Gk, Gijk, Ga, Gb, Gc;
28
int Gij, ij, Gab, ab, Gjk, jk;
31
int nrows, ncols, nlinks;
32
int Gd, d, cd, dc, Gid, id, DD;
33
int Gm, m, Gmi, mi, im, mc, M;
34
int GS, GH, GU, GC, GX3;
36
GC = CMNEF->file.my_irrep;
38
GU = WMBIJ->file.my_irrep;
41
GH = Dints_anti->file.my_irrep;
43
GH = WMAFE->file.my_irrep;
45
GS = SIJAB->file.my_irrep;
49
nirreps = CMNEF->params->nirreps;
55
dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ");
56
dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB");
59
dpd_file2_mat_init(SIA);
60
dpd_file2_mat_rd(SIA);
62
for(h=0; h < nirreps; h++) {
63
dpd_buf4_mat_irrep_init(Dints_anti, h);
64
dpd_buf4_mat_irrep_rd(Dints_anti, h);
69
dpd_file2_mat_init(FME);
70
dpd_file2_mat_rd(FME);
72
for(h=0; h < nirreps; h++) {
73
dpd_buf4_mat_irrep_init(SIJAB, h);
74
dpd_buf4_mat_irrep_rd(SIJAB, h);
76
for(h=0; h < nirreps; h++) {
77
dpd_buf4_mat_irrep_init(WMNIE, h);
78
dpd_buf4_mat_irrep_rd(WMNIE, h);
82
/* target T3 amplitudes go in here */
83
W1 = (double ***) malloc(nirreps * sizeof(double **));
85
for(Gi=0; Gi < nirreps; Gi++) {
86
for(Gj=0; Gj < nirreps; Gj++) {
88
for(Gk=0; Gk < nirreps; Gk++) {
92
for(Gab=0; Gab < nirreps; Gab++) {
94
Gc = Gab ^ Gijk ^ GX3;
95
W1[Gab] = dpd_block_matrix(WABEI->params->coltot[Gab], virtpi[Gc]);
98
for(i=0; i < occpi[Gi]; i++) {
100
for(j=0; j < occpi[Gj]; j++) {
102
for(k=0; k < occpi[Gk]; k++) {
105
T3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, CMNEF, WABEI, WMBIJ, &fIJ, &fAB,
106
occpi, occ_off, virtpi, vir_off, omega);
109
/* t_KC <-- 1/4 t_IJKABC <IJ||AB> */
111
Gc = Gk ^ GS; /* changed */
112
Gab = Gij ^ GH ; /* changed */
114
ij = Dints_anti->params->rowidx[I][J];
116
nrows = Dints_anti->params->coltot[Gij^GH]; /* changed */
120
C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, Dints_anti->matrix[Gij][ij], 1,
121
1.0, SIA->matrix[Gk][k], 1);
125
/* t_IJAB <-- t_IJKABC F_KC */
129
nrows = SIJAB->params->coltot[Gij^GS];
131
ij = SIJAB->params->rowidx[I][J];
134
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, FME->matrix[Gk][k], 1,
135
1.0, SIJAB->matrix[Gij][ij], 1);
137
/* t_JKDC <-- +1/2 t_IJKABC W_IDAB */
138
/* t_JKCD <-- -1/2 t_IJKABC W_IDAB */
139
jk = SIJAB->params->rowidx[J][K];
140
for(Gd=0; Gd < nirreps; Gd++) {
143
Gc = Gab ^ Gijk ^ GX3;
145
id = WMAFE->row_offset[Gid][I];
147
Z = block_matrix(virtpi[Gc],virtpi[Gd]);
148
WMAFE->matrix[Gid] = dpd_block_matrix(virtpi[Gd], WMAFE->params->coltot[Gid^GH]);
149
dpd_buf4_mat_irrep_rd_block(WMAFE, Gid, id, virtpi[Gd]);
153
nlinks = WMAFE->params->coltot[Gid^GH];
155
if(nrows && ncols && nlinks)
156
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows,
157
WMAFE->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
159
for(c=0; c < virtpi[Gc]; c++) {
161
for(d=0; d < virtpi[Gd]; d++) {
162
DD = vir_off[Gd] + d;
163
cd = SIJAB->params->colidx[C][DD];
164
dc = SIJAB->params->colidx[DD][C];
165
SIJAB->matrix[Gjk][jk][dc] += Z[c][d];
166
SIJAB->matrix[Gjk][jk][cd] += -Z[c][d];
169
dpd_free_block(WMAFE->matrix[Gid], virtpi[Gd], WMAFE->params->coltot[Gid^GH]);
174
/* S_MIAB <-- +1/2 t_IJKABC W_JKMC */
175
/* S_IMAB <-- -1/2 t_IJKABC W_JKMC */
176
jk = WMNIE->params->rowidx[J][K];
177
for(Gm=0; Gm < nirreps; Gm++) {
180
Gc = Gab ^ Gijk ^ GX3;
182
mc = WMNIE->col_offset[Gjk][Gm];
184
nrows = WABEI->params->coltot[Gab];
188
Z = dpd_block_matrix(nrows, ncols);
190
if(nrows && ncols && nlinks)
191
C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nlinks,
192
&(WMNIE->matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols);
194
for(m=0; m < ncols; m++) {
196
mi = SIJAB->params->rowidx[M][I];
197
im = SIJAB->params->rowidx[I][M];
198
for(ab=0; ab < nrows; ab++) {
199
SIJAB->matrix[Gmi][mi][ab] += Z[ab][m];
200
SIJAB->matrix[Gmi][im][ab] -= Z[ab][m];
204
dpd_free_block(Z, nrows, ncols);
206
} /* end do_doubles */
212
for(Gab=0; Gab < nirreps; Gab++) {
213
/* This will need to change for non-totally-symmetric cases */
215
dpd_free_block(W1[Gab], WABEI->params->coltot[Gab], virtpi[Gc]);
224
dpd_file2_close(&fIJ);
225
dpd_file2_close(&fAB);
229
dpd_file2_mat_wrt(SIA);
230
dpd_file2_mat_close(SIA);
232
for(h=0; h < nirreps; h++)
233
dpd_buf4_mat_irrep_close(Dints_anti, h);
238
dpd_file2_mat_close(FME);
240
for(h=0; h < nirreps; h++)
241
dpd_buf4_mat_irrep_close(WMNIE, h);
243
for(h=0; h < nirreps; h++) {
244
dpd_buf4_mat_irrep_wrt(SIJAB, h);
245
dpd_buf4_mat_irrep_close(SIJAB, h);
250
void cc3_sigma_UHF_BBB(dpdbuf4 *Cmnef, dpdbuf4 *Wabei, dpdbuf4 *Wmbij,
251
int do_singles, dpdbuf4 *Dijab_anti, dpdfile2 *Sia, int do_doubles,
252
dpdfile2 *Fme, dpdbuf4 *Wmafe, dpdbuf4 *Wmnie, dpdbuf4 *Sijab,
253
int *boccpi, int *bocc_off, int *bvirtpi, int *bvir_off,
254
double omega, FILE *outfile)
257
int *occ_off, *occpi, *vir_off, *virtpi;
258
int Gi, Gj, Gk, Gijk, Ga, Gb, Gc;
259
int i, j, k, I, J, K;
260
int a, b, c, A, B, C;
261
int Gij, ij, Gab, ab, Gjk, jk;
264
int nrows, ncols, nlinks;
265
int Gd, d, cd, dc, Gid, id, DD;
266
int Gm, m, Gmi, mi, im, mc, M;
267
int GS, GH, GU, GC, GX3;
269
GC = Cmnef->file.my_irrep;
270
GU = Wmbij->file.my_irrep;
273
GH = Dijab_anti->file.my_irrep;
275
GH = Wmafe->file.my_irrep;
277
GS = Sijab->file.my_irrep;
280
nirreps = Cmnef->params->nirreps;
286
dpd_file2_init(&fIJ, CC_OEI, 0, 2, 2, "fij");
287
dpd_file2_init(&fAB, CC_OEI, 0, 3, 3, "fab");
291
dpd_file2_mat_init(Sia);
292
dpd_file2_mat_rd(Sia);
294
for(h=0; h < nirreps; h++) {
295
dpd_buf4_mat_irrep_init(Dijab_anti, h);
296
dpd_buf4_mat_irrep_rd(Dijab_anti, h);
302
dpd_file2_mat_init(Fme);
303
dpd_file2_mat_rd(Fme);
305
for(h=0; h < nirreps; h++) {
306
dpd_buf4_mat_irrep_init(Sijab, h);
307
dpd_buf4_mat_irrep_rd(Sijab, h);
310
for(h=0; h < nirreps; h++) {
311
dpd_buf4_mat_irrep_init(Wmnie, h);
312
dpd_buf4_mat_irrep_rd(Wmnie, h);
316
/* target T3 amplitudes go in here */
317
W1 = (double ***) malloc(nirreps * sizeof(double **));
319
for(Gi=0; Gi < nirreps; Gi++) {
320
for(Gj=0; Gj < nirreps; Gj++) {
322
for(Gk=0; Gk < nirreps; Gk++) {
326
for(Gab=0; Gab < nirreps; Gab++) {
327
Gc = Gab ^ Gijk ^ GX3;
328
W1[Gab] = dpd_block_matrix(Wabei->params->coltot[Gab], virtpi[Gc]);
331
for(i=0; i < occpi[Gi]; i++) {
333
for(j=0; j < occpi[Gj]; j++) {
335
for(k=0; k < occpi[Gk]; k++) {
338
T3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, Cmnef, Wabei, Wmbij, &fIJ, &fAB,
339
occpi, occ_off, virtpi, vir_off, omega);
343
/* S_kc <-- 1/4 t_ijkabc <ij||ab> */
347
ij = Dijab_anti->params->rowidx[I][J];
349
nrows = Dijab_anti->params->coltot[Gij^GH];
353
C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, Dijab_anti->matrix[Gij][ij], 1,
354
1.0, Sia->matrix[Gk][k], 1);
359
/* S_ijab <-- t_ijkabc F_kc */
363
nrows = Sijab->params->coltot[Gij^GS];
365
ij = Sijab->params->rowidx[I][J];
368
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, Fme->matrix[Gk][k], 1,
369
1.0, Sijab->matrix[Gij][ij], 1);
371
/* S_jkdc <-- 1/2 t_ijkabc W_idab */
372
/* S_jkcd <-- -1/2 t_ijkabc W_idab */
373
jk = Sijab->params->rowidx[J][K];
374
for(Gd=0; Gd < nirreps; Gd++) {
378
Gc = Gab ^ Gijk ^ GX3;
380
id = Wmafe->row_offset[Gid][I];
382
Z = block_matrix(virtpi[Gc],virtpi[Gd]);
383
Wmafe->matrix[Gid] = dpd_block_matrix(virtpi[Gd], Wmafe->params->coltot[Gid^GH]);
384
dpd_buf4_mat_irrep_rd_block(Wmafe, Gid, id, virtpi[Gd]);
388
nlinks = Wmafe->params->coltot[Gid^GH];
390
if(nrows && ncols && nlinks)
391
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows,
392
Wmafe->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
394
for(c=0; c < virtpi[Gc]; c++) {
396
for(d=0; d < virtpi[Gd]; d++) {
397
DD = vir_off[Gd] + d;
398
cd = Sijab->params->colidx[C][DD];
399
dc = Sijab->params->colidx[DD][C];
400
Sijab->matrix[Gjk][jk][dc] += Z[c][d];
401
Sijab->matrix[Gjk][jk][cd] += -Z[c][d];
404
dpd_free_block(Wmafe->matrix[Gid], virtpi[Gd], Wmafe->params->coltot[Gid^GH]);
408
/* S_miab <-- +1/2 t_ijkabc W_jkmc */
409
/* S_imab <-- -1/2 t_ijkabc W_jkmc */
410
jk = Wmnie->params->rowidx[J][K];
411
for(Gm=0; Gm < nirreps; Gm++) {
414
Gc = Gab ^ Gijk ^ GX3;
416
mc = Wmnie->col_offset[Gjk][Gm];
418
nrows = Wabei->params->coltot[Gab];
422
Z = dpd_block_matrix(nrows, ncols);
424
if(nrows && ncols && nlinks)
425
C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nlinks,
426
&(Wmnie->matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols);
428
for(m=0; m < ncols; m++) {
430
mi = Sijab->params->rowidx[M][I];
431
im = Sijab->params->rowidx[I][M];
432
for(ab=0; ab < nrows; ab++) {
433
Sijab->matrix[Gmi][mi][ab] += Z[ab][m];
434
Sijab->matrix[Gmi][im][ab] -= Z[ab][m];
438
dpd_free_block(Z, nrows, ncols);
440
} /* end do_doubles */
446
for(Gab=0; Gab < nirreps; Gab++) {
447
/* This will need to change for non-totally-symmetric cases */
449
dpd_free_block(W1[Gab], Wabei->params->coltot[Gab], virtpi[Gc]);
458
dpd_file2_close(&fIJ);
459
dpd_file2_close(&fAB);
463
dpd_file2_mat_wrt(Sia);
464
dpd_file2_mat_close(Sia);
466
for(h=0; h < nirreps; h++)
467
dpd_buf4_mat_irrep_close(Dijab_anti, h);
472
dpd_file2_mat_close(Fme);
474
for(h=0; h < nirreps; h++)
475
dpd_buf4_mat_irrep_close(Wmnie, h);
477
for(h=0; h < nirreps; h++) {
478
dpd_buf4_mat_irrep_wrt(Sijab, h);
479
dpd_buf4_mat_irrep_close(Sijab, h);
484
void cc3_sigma_UHF_AAB(dpdbuf4 *C2AA, dpdbuf4 *C2AB, dpdbuf4 *C2BA,
485
dpdbuf4 *FAA, dpdbuf4 *FAB, dpdbuf4 *FBA,
486
dpdbuf4 *EAA, dpdbuf4 *EAB, dpdbuf4 *EBA,
487
int do_singles, dpdbuf4 *DAA, dpdbuf4 *DAB, dpdfile2 *SIA, dpdfile2 *Sia,
488
int do_doubles, dpdfile2 *FME, dpdfile2 *Fme,
489
dpdbuf4 *WMAFE, dpdbuf4 *WMaFe, dpdbuf4 *WmAfE,
490
dpdbuf4 *WMNIE, dpdbuf4 *WMnIe, dpdbuf4 *WmNiE,
491
dpdbuf4 *SIJAB, dpdbuf4 *SIjAb, int *aoccpi, int *aocc_off, int *boccpi,
492
int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off,
493
double omega, FILE *outfile)
496
int Gi, Gj, Gk, Gijk;
498
int Gij, ij, ji, Gjk, jk, Gbc, bc, Gcb, cb;
499
int Gd, Gkd, kd, d, DD, ad, da, dc, Gid, id, Gac, ac, bd;
500
int i, j, k, I, J, K;
501
int a, b, c, A, B, C;
503
double ***W1, ***W2, ***W3;
504
dpdfile2 fIJ, fAB, fij, fab;
505
int nrows, ncols, nlinks;
506
int **W_offset, offset;
508
int Gm, m, Gmi, mi, im, mc, M;
509
int Gmk, mk, ma, kj, Gim;
510
int GS, GH, GU, GC, GX3;
512
GC = C2AA->file.my_irrep;
513
GU = EAA->file.my_irrep;
516
GH = DAA->file.my_irrep;
518
GH = WMAFE->file.my_irrep;
520
GS = SIJAB->file.my_irrep;
523
nirreps = C2AA->params->nirreps;
525
W_offset = init_int_matrix(nirreps, nirreps);
526
for(Gab=0; Gab < nirreps; Gab++) {
527
for(Ga=0,offset=0; Ga < nirreps; Ga++) {
529
W_offset[Gab][Ga] = offset;
530
offset += avirtpi[Ga] * avirtpi[Gb];
535
dpd_file2_mat_init(SIA);
536
dpd_file2_mat_rd(SIA);
537
dpd_file2_mat_init(Sia);
538
dpd_file2_mat_rd(Sia);
540
for(h=0; h < nirreps; h++) {
541
dpd_buf4_mat_irrep_init(DAA, h);
542
dpd_buf4_mat_irrep_rd(DAA, h);
543
dpd_buf4_mat_irrep_init(DAB, h);
544
dpd_buf4_mat_irrep_rd(DAB, h);
549
dpd_file2_mat_init(FME);
550
dpd_file2_mat_rd(FME);
551
dpd_file2_mat_init(Fme);
552
dpd_file2_mat_rd(Fme);
554
for(h=0; h < nirreps; h++) {
555
dpd_buf4_mat_irrep_init(WMnIe, h);
556
dpd_buf4_mat_irrep_rd(WMnIe, h);
558
dpd_buf4_mat_irrep_init(WMNIE, h);
559
dpd_buf4_mat_irrep_rd(WMNIE, h);
561
dpd_buf4_mat_irrep_init(WmNiE, h);
562
dpd_buf4_mat_irrep_rd(WmNiE, h);
564
for(h=0; h < nirreps; h++) {
565
dpd_buf4_mat_irrep_init(SIJAB, h);
566
dpd_buf4_mat_irrep_rd(SIJAB, h);
568
for(h=0; h < nirreps; h++) {
569
dpd_buf4_mat_irrep_init(SIjAb, h);
570
dpd_buf4_mat_irrep_rd(SIjAb, h);
574
dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ");
575
dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB");
576
dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij");
577
dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab");
579
/* target T3 amplitudes go in here */
580
W1 = (double ***) malloc(nirreps * sizeof(double **));
581
W2 = (double ***) malloc(nirreps * sizeof(double **));
582
W3 = (double ***) malloc(nirreps * sizeof(double **));
584
for(Gi=0; Gi < nirreps; Gi++) {
585
for(Gj=0; Gj < nirreps; Gj++) {
587
for(Gk=0; Gk < nirreps; Gk++) {
591
for(Gab=0; Gab < nirreps; Gab++) {
592
Gc = Gab ^ Gijk ^ GX3;
593
W1[Gab] = dpd_block_matrix(FAA->params->coltot[Gab], bvirtpi[Gc]);
595
for(Ga=0; Ga < nirreps; Ga++) {
596
Gcb = Ga ^ Gijk ^ GX3;
597
W2[Ga] = dpd_block_matrix(avirtpi[Ga], WmAfE->params->coltot[Gcb]); /* alpha-beta-alpha */
599
for(Gb=0; Gb < nirreps; Gb++) {
600
Gac = Gb ^ Gijk ^ GX3;
601
W3[Gb] = dpd_block_matrix(avirtpi[Gb], WMaFe->params->coltot[Gac]); /* alpha-alpha-beta */
604
for(i=0; i < aoccpi[Gi]; i++) {
605
I = aocc_off[Gi] + i;
606
for(j=0; j < aoccpi[Gj]; j++) {
607
J = aocc_off[Gj] + j;
608
for(k=0; k < boccpi[Gk]; k++) {
609
K = bocc_off[Gk] + k;
611
T3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, C2AA, C2AB, C2BA,
612
FAA, FAB, FBA, EAA, EAB, EBA, &fIJ, &fij, &fAB, &fab,
613
aoccpi, aocc_off, boccpi, bocc_off, avirtpi, avir_off, bvirtpi, bvir_off, omega);
617
/* S_kc <-- 1/4 t_IJkABc <IJ||AB> */
622
ij = DAA->params->rowidx[I][J];
624
nrows = DAA->params->coltot[Gij^GH];
628
C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, DAA->matrix[Gij][ij], 1,
629
1.0, Sia->matrix[Gk][k], 1);
631
/* S_IA <-- t_IJkABc <Jk|Bc> */
636
jk = DAB->params->rowidx[J][K];
638
for(Gab=0; Gab < nirreps; Gab++) {
642
ab = W_offset[Gab][Ga];
643
bc = DAB->col_offset[Gjk][Gb];
646
ncols = avirtpi[Gb] * bvirtpi[Gc];
649
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][ab], ncols, &(DAB->matrix[Gjk][jk][bc]), 1,
650
1.0, SIA->matrix[Gi][i], 1);
655
/* S_IJAB <-- t_IJkABc F_kc */
659
nrows = SIJAB->params->coltot[Gij^GS];
661
ij = SIJAB->params->rowidx[I][J];
664
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, Fme->matrix[Gk][k], 1,
665
1.0, SIJAB->matrix[Gij][ij], 1);
667
/* S_JkBc <-- t_IJkABc F_IA */
671
jk = C2AB->params->rowidx[J][K];
673
for(Gab=0; Gab < nirreps; Gab++) {
677
ab = W_offset[Gab][Ga];
678
bc = SIjAb->col_offset[Gjk][Gb];
681
ncols = avirtpi[Gb] * bvirtpi[Gc];
684
C_DGEMV('t', nrows, ncols, 1.0, W1[Gab][ab], ncols, FME->matrix[Gi][i], 1,
685
1.0, &(SIjAb->matrix[Gjk][jk][bc]), 1);
688
/* S_JIDA <-- t_IJkABc W_kDcB */
689
/* sort W1(AB,c) to W2(A,cB) */
690
for(Gab=0; Gab < nirreps; Gab++) {
691
Gc = Gab ^ Gijk ^ GX3;
692
for(ab=0; ab < FAA->params->coltot[Gab]; ab++) {
693
A = FAA->params->colorb[Gab][ab][0];
694
B = FAA->params->colorb[Gab][ab][1];
695
Ga = FAA->params->rsym[A];
696
a = A - avir_off[Ga];
697
for(c=0; c < bvirtpi[Gc]; c++) {
698
C = bvir_off[Gc] + c;
699
cb = WmAfE->params->colidx[C][B];
700
W2[Ga][a][cb] = W1[Gab][ab][c];
705
ji = SIJAB->params->rowidx[J][I];
707
for(Gd=0; Gd < nirreps; Gd++) {
712
kd = WmAfE->row_offset[Gkd][K];
713
WmAfE->matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], WmAfE->params->coltot[Gkd^GH]);
714
dpd_buf4_mat_irrep_rd_block(WmAfE, Gkd, kd, avirtpi[Gd]);
715
Z = block_matrix(avirtpi[Ga], avirtpi[Gd]);
719
nlinks = WmAfE->params->coltot[Gkd^GH];
721
if(nrows && ncols && nlinks)
722
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W2[Ga][0], nlinks,
723
WmAfE->matrix[Gkd][0], nlinks, 0.0, Z[0], ncols);
725
for(a=0; a < avirtpi[Ga]; a++) {
726
A = avir_off[Ga] + a;
727
for(d=0; d < avirtpi[Gd]; d++) {
728
DD = avir_off[Gd] + d;
729
ad = SIJAB->params->colidx[A][DD];
730
da = SIJAB->params->colidx[DD][A];
731
SIJAB->matrix[Gij][ji][ad] += -Z[a][d];
732
SIJAB->matrix[Gij][ji][da] += Z[a][d];
736
dpd_free_block(WmAfE->matrix[Gkd], avirtpi[Gd], WmAfE->params->coltot[Gkd^GH]);
740
/* S_JkDc <-- 1/2 t_IJkABc W_IDAB */
742
jk = SIjAb->params->rowidx[J][K];
744
for(Gd=0; Gd < nirreps; Gd++) {
747
Gc = Gab ^ Gijk ^ GX3;
749
id = WMAFE->row_offset[Gid][I];
750
WMAFE->matrix[Gid] = dpd_block_matrix(avirtpi[Gd], WMAFE->params->coltot[Gid^GH]);
751
dpd_buf4_mat_irrep_rd_block(WMAFE, Gid, id, avirtpi[Gd]);
752
Z = block_matrix(bvirtpi[Gc], avirtpi[Gd]);
756
nlinks = WMAFE->params->coltot[Gid^GH];
758
if(nrows && ncols && nlinks)
759
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows,
760
WMAFE->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
762
for(c=0; c < bvirtpi[Gc]; c++) {
763
C = bvir_off[Gc] + c;
764
for(d=0; d < avirtpi[Gd]; d++) {
765
DD = avir_off[Gd] + d;
766
dc = SIjAb->params->colidx[DD][C];
767
SIjAb->matrix[Gjk][jk][dc] += Z[c][d];
772
dpd_free_block(WMAFE->matrix[Gid], avirtpi[Gd], WMAFE->params->coltot[Gid^GH]);
775
/* t_JkBd <-- t_IJkABc W_IdAc */
776
/* sort W1(AB,c) to W3(B,Ac) */
777
for(Gab=0; Gab < nirreps; Gab++) {
778
Gc = Gab ^ Gijk ^ GX3;
779
for(ab=0; ab < FAA->params->coltot[Gab]; ab++) {
780
A = FAA->params->colorb[Gab][ab][0];
781
B = FAA->params->colorb[Gab][ab][1];
782
Gb = FAA->params->ssym[B];
783
b = B - avir_off[Gb];
784
for(c=0; c < bvirtpi[Gc]; c++) {
785
C = bvir_off[Gc] + c;
786
ac = WMaFe->params->colidx[A][C];
787
W3[Gb][b][ac] = W1[Gab][ab][c];
792
jk = SIjAb->params->rowidx[J][K];
794
for(Gd=0; Gd < nirreps; Gd++) {
797
Gb = Gac ^ Gijk ^ GX3;
799
id = WMaFe->row_offset[Gid][I];
800
WMaFe->matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], WMaFe->params->coltot[Gid^GH]);
801
dpd_buf4_mat_irrep_rd_block(WMaFe, Gid, id, bvirtpi[Gd]);
802
Z = block_matrix(avirtpi[Gb], bvirtpi[Gd]);
806
nlinks = WMaFe->params->coltot[Gid^GH];
808
if(nrows && ncols && nlinks)
809
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W3[Gb][0], nlinks,
810
WMaFe->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
812
for(b=0; b < avirtpi[Gb]; b++) {
813
B = avir_off[Gb] + b;
814
for(d=0; d < bvirtpi[Gd]; d++) {
815
DD = bvir_off[Gd] + d;
816
bd = SIjAb->params->colidx[B][DD];
817
SIjAb->matrix[Gjk][jk][bd] += Z[b][d];
821
dpd_free_block(WMaFe->matrix[Gid], bvirtpi[Gd], WMaFe->params->coltot[Gid^GH]);
825
/* S_MIAB <--- +t_IJkABc W_JkMc */
826
/* S_IMAB <--- -t_IJkABc W_JkMc */
828
jk = WMnIe->params->rowidx[J][K];
830
for(Gm=0; Gm < nirreps; Gm++) {
833
Gc = Gab ^ Gijk ^ GX3;
835
mc = WMnIe->col_offset[Gjk][Gm];
837
nrows = FAA->params->coltot[Gab];
839
nlinks = bvirtpi[Gc];
841
Z = dpd_block_matrix(nrows, ncols);
843
if(nrows && ncols && nlinks)
844
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W1[Gab][0], nlinks,
845
&(WMnIe->matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols);
847
for(m=0; m < ncols; m++) {
848
M = aocc_off[Gm] + m;
849
mi = SIJAB->params->rowidx[M][I];
850
im = SIJAB->params->rowidx[I][M];
851
for(ab=0; ab < nrows; ab++) {
852
SIJAB->matrix[Gmi][mi][ab] += Z[ab][m];
853
SIJAB->matrix[Gmi][im][ab] -= Z[ab][m];
857
dpd_free_block(Z, nrows, ncols);
860
/* t_MkBc <-- 1/2 t_IJkABc W_IJMA */
861
/* sort W(AB,c) to W(A,Bc) */
862
for(Gab=0; Gab < nirreps; Gab++) {
863
Gc = Gab ^ Gijk ^ GX3;
864
for(ab=0; ab < FAA->params->coltot[Gab]; ab++ ){
865
A = FAA->params->colorb[Gab][ab][0];
866
B = FAA->params->colorb[Gab][ab][1];
867
Ga = FAA->params->rsym[A];
868
a = A - avir_off[Ga];
869
for(c=0; c < bvirtpi[Gc]; c++) {
870
C = bvir_off[Gc] + c;
871
bc = SIjAb->params->colidx[B][C];
872
W3[Ga][a][bc] = W1[Gab][ab][c];
877
ij = WMNIE->params->rowidx[I][J];
879
for(Gm=0; Gm < nirreps; Gm++) {
882
Ga = Gbc ^ Gijk ^ GX3;
884
ma = WMNIE->col_offset[Gij][Gm];
886
nrows = SIjAb->params->coltot[Gmk^GS];
888
nlinks = avirtpi[Ga];
890
Z = dpd_block_matrix(nrows, ncols);
892
if(nrows && ncols && nlinks)
893
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W3[Ga][0], nrows,
894
&(WMNIE->matrix[Gij][ij][ma]), nlinks, 0.0, Z[0], ncols);
896
for(m=0; m < aoccpi[Gm]; m++) {
897
M = aocc_off[Gm] + m;
898
mk = SIjAb->params->rowidx[M][K];
899
for(bc=0; bc < nrows; bc++) {
900
SIjAb->matrix[Gmk][mk][bc] += Z[bc][m];
904
dpd_free_block(Z, nrows, ncols);
907
/* S_ImBc <-- t_IJkABc W_kJmA */
908
/* sort W(AB,c) to W(A,Bc) */
909
for(Gab=0; Gab < nirreps; Gab++) {
910
Gc = Gab ^ Gijk ^ GX3; /* assumes totally symmetric */
911
for(ab=0; ab < FAA->params->coltot[Gab]; ab++ ){
912
A = FAA->params->colorb[Gab][ab][0];
913
B = FAA->params->colorb[Gab][ab][1];
914
Ga = FAA->params->rsym[A];
915
a = A - avir_off[Ga];
916
for(c=0; c < bvirtpi[Gc]; c++) {
917
C = bvir_off[Gc] + c;
918
bc = SIjAb->params->colidx[B][C];
919
W3[Ga][a][bc] = W1[Gab][ab][c];
924
kj = WmNiE->params->rowidx[K][J];
926
for(Gm=0; Gm < nirreps; Gm++) {
929
Ga = Gbc ^ Gijk ^ GX3;
931
ma = WmNiE->col_offset[Gjk][Gm];
933
nrows = SIjAb->params->coltot[Gim^GS];
935
nlinks = avirtpi[Ga];
937
Z = dpd_block_matrix(nrows, ncols);
939
if(nrows && ncols && nlinks)
940
C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, W3[Ga][0], nrows,
941
&(WmNiE->matrix[Gjk][kj][ma]), nlinks, 0.0, Z[0], ncols);
943
for(m=0; m < boccpi[Gm]; m++) {
944
M = bocc_off[Gm] + m;
945
im = SIjAb->params->rowidx[I][M];
946
for(bc=0; bc < nrows; bc++) {
947
SIjAb->matrix[Gim][im][bc] += Z[bc][m];
951
dpd_free_block(Z, nrows, ncols);
959
for(Gab=0; Gab < nirreps; Gab++) {
960
/* This will need to change for non-totally-symmetric cases */
961
Gc = Gab ^ Gijk ^ GX3;
962
dpd_free_block(W1[Gab], FAA->params->coltot[Gab], bvirtpi[Gc]);
964
for(Ga=0; Ga < nirreps; Ga++) {
965
Gcb = Ga ^ Gijk ^ GX3; /* assumes totally symmetric */
966
dpd_free_block(W2[Ga], avirtpi[Ga], WmAfE->params->coltot[Gcb]);
968
for(Gb=0; Gb < nirreps; Gb++) {
969
Gac = Gb ^ Gijk ^ GX3; /* assumes totally symmetric */
970
dpd_free_block(W3[Gb], avirtpi[Gb], WMaFe->params->coltot[Gac]);
980
free_int_matrix(W_offset, nirreps);
982
dpd_file2_close(&fIJ);
983
dpd_file2_close(&fAB);
984
dpd_file2_close(&fij);
985
dpd_file2_close(&fab);
989
dpd_file2_mat_wrt(SIA);
990
dpd_file2_mat_close(SIA);
991
dpd_file2_mat_wrt(Sia);
992
dpd_file2_mat_close(Sia);
994
for(h=0; h < nirreps; h++) {
995
dpd_buf4_mat_irrep_close(DAA, h);
996
dpd_buf4_mat_irrep_close(DAB, h);
1002
dpd_file2_mat_close(FME);
1003
dpd_file2_mat_close(Fme);
1005
for(h=0; h < nirreps; h++) {
1006
dpd_buf4_mat_irrep_close(WMNIE, h);
1007
dpd_buf4_mat_irrep_close(WMnIe, h);
1008
dpd_buf4_mat_irrep_close(WmNiE, h);
1010
for(h=0; h < nirreps; h++) {
1011
dpd_buf4_mat_irrep_wrt(SIJAB, h);
1012
dpd_buf4_mat_irrep_close(SIJAB, h);
1014
for(h=0; h < nirreps; h++) {
1015
dpd_buf4_mat_irrep_wrt(SIjAb, h);
1016
dpd_buf4_mat_irrep_close(SIjAb, h);
1021
void cc3_sigma_UHF_BBA(dpdbuf4 *C2BB, dpdbuf4 *C2AB, dpdbuf4 *C2BA,
1022
dpdbuf4 *FBB, dpdbuf4 *FAB, dpdbuf4 *FBA,
1023
dpdbuf4 *EBB, dpdbuf4 *EAB, dpdbuf4 *EBA,
1024
int do_singles, dpdbuf4 *DBB, dpdbuf4 *DBA, dpdfile2 *SIA, dpdfile2 *Sia,
1025
int do_doubles, dpdfile2 *FME, dpdfile2 *Fme,
1026
dpdbuf4 *Wmafe, dpdbuf4 *WMaFe, dpdbuf4 *WmAfE,
1027
dpdbuf4 *Wmnie, dpdbuf4 *WMnIe, dpdbuf4 *WmNiE,
1028
dpdbuf4 *Sijab, dpdbuf4 *SIjAb, int *aoccpi, int *aocc_off, int *boccpi,
1029
int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off,
1030
double omega, FILE *outfile)
1032
int h, nirreps, S_irr;
1033
int Gi, Gj, Gk, Gijk;
1034
int Ga, Gb, Gc, Gab;
1035
int Gij, ij, ji, Gjk, jk, Gbc, bc, Gcb, cb;
1036
int Gd, Gkd, kd, d, DD, ad, da, dc, Gid, id, Gac, ac, bd;
1037
int i, j, k, I, J, K;
1038
int a, b, c, A, B, C;
1040
double ***W1, ***W2, ***W3;
1041
dpdfile2 fIJ, fAB, fij, fab;
1042
int nrows, ncols, nlinks;
1043
int **W_offset, offset;
1046
int Gm, m, Gmi, mi, im, mc, M;
1047
int Gmk, mk, ma, kj, Gim;
1048
int GS, GH, GU, GC, GX3;
1050
GC = C2BB->file.my_irrep;
1051
GU = EBB->file.my_irrep;
1054
GH = DBB->file.my_irrep;
1055
else if (do_doubles)
1056
GH = Wmafe->file.my_irrep;
1058
GS = Sijab->file.my_irrep;
1061
nirreps = C2BB->params->nirreps;
1063
W_offset = init_int_matrix(nirreps, nirreps);
1064
for(Gab=0; Gab < nirreps; Gab++) {
1065
for(Ga=0,offset=0; Ga < nirreps; Ga++) {
1067
W_offset[Gab][Ga] = offset;
1068
offset += bvirtpi[Ga] * bvirtpi[Gb];
1074
dpd_file2_mat_init(SIA);
1075
dpd_file2_mat_rd(SIA);
1076
dpd_file2_mat_init(Sia);
1077
dpd_file2_mat_rd(Sia);
1079
for(h=0; h < nirreps; h++) {
1080
dpd_buf4_mat_irrep_init(DBB, h);
1081
dpd_buf4_mat_irrep_rd(DBB, h);
1082
dpd_buf4_mat_irrep_init(DBA, h);
1083
dpd_buf4_mat_irrep_rd(DBA, h);
1089
dpd_file2_mat_init(FME);
1090
dpd_file2_mat_rd(FME);
1091
dpd_file2_mat_init(Fme);
1092
dpd_file2_mat_rd(Fme);
1094
for(h=0; h < nirreps; h++) {
1095
dpd_buf4_mat_irrep_init(WmNiE, h);
1096
dpd_buf4_mat_irrep_rd(WmNiE, h);
1098
dpd_buf4_mat_irrep_init(Wmnie, h);
1099
dpd_buf4_mat_irrep_rd(Wmnie, h);
1101
dpd_buf4_mat_irrep_init(WMnIe, h);
1102
dpd_buf4_mat_irrep_rd(WMnIe, h);
1104
for(h=0; h < nirreps; h++) {
1105
dpd_buf4_mat_irrep_init(Sijab, h);
1106
dpd_buf4_mat_irrep_rd(Sijab, h);
1109
/* put result here until end of function */
1110
S_irr = SIjAb->file.my_irrep;
1111
dpd_buf4_init(&SiJaB, CC_TMP0, S_irr, 23, 29, 23, 29, 0, "CC3 SiJaB");
1112
for(h=0; h < nirreps; h++) {
1113
dpd_buf4_mat_irrep_init(&SiJaB, h);
1117
dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ");
1118
dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB");
1119
dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij");
1120
dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab");
1122
/* target T3 amplitudes go in here */
1123
W1 = (double ***) malloc(nirreps * sizeof(double **));
1124
W2 = (double ***) malloc(nirreps * sizeof(double **));
1125
W3 = (double ***) malloc(nirreps * sizeof(double **));
1127
for(Gi=0; Gi < nirreps; Gi++) {
1128
for(Gj=0; Gj < nirreps; Gj++) {
1130
for(Gk=0; Gk < nirreps; Gk++) {
1131
Gijk = Gi ^ Gj ^ Gk;
1134
for(Gab=0; Gab < nirreps; Gab++) {
1135
Gc = Gab ^ Gijk ^ GX3;
1136
W1[Gab] = dpd_block_matrix(FBB->params->coltot[Gab], avirtpi[Gc]);
1138
for(Ga=0; Ga < nirreps; Ga++) {
1139
Gcb = Ga ^ Gijk ^ GX3;
1140
W2[Ga] = dpd_block_matrix(bvirtpi[Ga], WMaFe->params->coltot[Gcb]);
1142
for(Gb=0; Gb < nirreps; Gb++) {
1143
Gac = Gb ^ Gijk ^ GX3;
1144
W3[Gb] = dpd_block_matrix(bvirtpi[Gb], WmAfE->params->coltot[Gac]);
1147
for(i=0; i < boccpi[Gi]; i++) {
1148
I = bocc_off[Gi] + i;
1149
for(j=0; j < boccpi[Gj]; j++) {
1150
J = bocc_off[Gj] + j;
1151
for(k=0; k < aoccpi[Gk]; k++) {
1152
K = aocc_off[Gk] + k;
1154
T3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, C2BB, C2BA, C2AB,
1155
FBB, FBA, FAB, EBB, EBA, EAB, &fij, &fIJ, &fab, &fAB,
1156
boccpi, bocc_off, aoccpi, aocc_off, bvirtpi, bvir_off, avirtpi, avir_off, omega);
1159
/* S_KC <-- 1/4 t_ijKabC <ij||ab> */
1164
ij = DBB->params->rowidx[I][J];
1166
nrows = DBB->params->coltot[Gij^GH];
1167
ncols = avirtpi[Gc];
1170
C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, DBB->matrix[Gij][ij], 1,
1171
1.0, SIA->matrix[Gk][k], 1);
1173
/* S_ia <-- t_ijKabC <jK|bC> */
1178
jk = DBA->params->rowidx[J][K];
1180
for(Gab=0; Gab < nirreps; Gab++) {
1184
ab = W_offset[Gab][Ga];
1185
bc = DBA->col_offset[Gjk][Gb];
1187
nrows = bvirtpi[Ga];
1188
ncols = bvirtpi[Gb] * avirtpi[Gc];
1191
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][ab], ncols, &(DBA->matrix[Gjk][jk][bc]), 1,
1192
1.0, Sia->matrix[Gi][i], 1);
1194
} /* end do_singles */
1197
/* S_ijab <-- t_ijKabC F_KC */
1201
nrows = Sijab->params->coltot[Gij^GS];
1202
ncols = avirtpi[Gc];
1203
ij = Sijab->params->rowidx[I][J];
1206
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, FME->matrix[Gk][k], 1,
1207
1.0, Sijab->matrix[Gij][ij], 1);
1209
/* S_jKbC <-- t_ijKabC F_ia */
1213
jk = C2BA->params->rowidx[J][K];
1215
for(Gab=0; Gab < nirreps; Gab++) {
1219
ab = W_offset[Gab][Ga];
1220
bc = SiJaB.col_offset[Gjk][Gb];
1222
nrows = bvirtpi[Ga];
1223
ncols = bvirtpi[Gb] * avirtpi[Gc];
1226
C_DGEMV('t', nrows, ncols, 1.0, W1[Gab][ab], ncols, Fme->matrix[Gi][i], 1,
1227
1.0, &(SiJaB.matrix[Gjk][jk][bc]), 1);
1230
/* S_jida <-- t_ijKabC W_KdCb */
1231
/* sort W1(ab,C) to W2(a,Cb) */
1232
for(Gab=0; Gab < nirreps; Gab++) {
1233
Gc = Gab ^ Gijk ^ GX3;
1234
for(ab=0; ab < FBB->params->coltot[Gab]; ab++) {
1235
A = FBB->params->colorb[Gab][ab][0];
1236
B = FBB->params->colorb[Gab][ab][1];
1237
Ga = FBB->params->rsym[A];
1238
a = A - bvir_off[Ga];
1239
for(c=0; c < avirtpi[Gc]; c++) {
1240
C = avir_off[Gc] + c;
1241
cb = WMaFe->params->colidx[C][B];
1242
W2[Ga][a][cb] = W1[Gab][ab][c];
1247
ji = Sijab->params->rowidx[J][I];
1249
for(Gd=0; Gd < nirreps; Gd++) {
1254
kd = WMaFe->row_offset[Gkd][K];
1255
WMaFe->matrix[Gkd] = dpd_block_matrix(bvirtpi[Gd], WMaFe->params->coltot[Gkd^GH]);
1256
dpd_buf4_mat_irrep_rd_block(WMaFe, Gkd, kd, bvirtpi[Gd]);
1257
Z = block_matrix(bvirtpi[Ga], bvirtpi[Gd]);
1259
nrows = bvirtpi[Ga];
1260
ncols = bvirtpi[Gd];
1261
nlinks = WMaFe->params->coltot[Gkd^GH];
1263
if(nrows && ncols && nlinks)
1264
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W2[Ga][0], nlinks,
1265
WMaFe->matrix[Gkd][0], nlinks, 0.0, Z[0], ncols);
1267
for(a=0; a < bvirtpi[Ga]; a++) {
1268
A = bvir_off[Ga] + a;
1269
for(d=0; d < bvirtpi[Gd]; d++) {
1270
DD = bvir_off[Gd] + d;
1271
ad = Sijab->params->colidx[A][DD];
1272
da = Sijab->params->colidx[DD][A];
1273
Sijab->matrix[Gij][ji][ad] += -Z[a][d];
1274
Sijab->matrix[Gij][ji][da] += Z[a][d];
1278
dpd_free_block(WMaFe->matrix[Gkd], bvirtpi[Gd], WMaFe->params->coltot[Gkd^GH]);
1282
/* t_jKcD <-- 1/2 t_ijKabC W_idab */
1284
jk = SiJaB.params->rowidx[J][K];
1286
for(Gd=0; Gd < nirreps; Gd++) {
1289
Gc = Gab ^ Gijk ^ GX3;
1291
id = Wmafe->row_offset[Gid][I];
1292
Wmafe->matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], Wmafe->params->coltot[Gid^GH]);
1293
dpd_buf4_mat_irrep_rd_block(Wmafe, Gid, id, bvirtpi[Gd]);
1294
Z = block_matrix(avirtpi[Gc], bvirtpi[Gd]);
1296
nrows = avirtpi[Gc];
1297
ncols = bvirtpi[Gd];
1298
nlinks = Wmafe->params->coltot[Gid^GH];
1300
if(nrows && ncols && nlinks)
1301
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows,
1302
Wmafe->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
1304
for(c=0; c < avirtpi[Gc]; c++) {
1305
C = avir_off[Gc] + c;
1306
for(d=0; d < bvirtpi[Gd]; d++) {
1307
DD = bvir_off[Gd] + d;
1308
dc = SiJaB.params->colidx[DD][C];
1309
SiJaB.matrix[Gjk][jk][dc] += Z[c][d];
1314
dpd_free_block(Wmafe->matrix[Gid], bvirtpi[Gd], Wmafe->params->coltot[Gid^GH]);
1317
/* t_jKbD <-- t_ijKabC W_iDaC */
1318
/* sort W1(ab,C) to W3(b,aC) */
1319
for(Gab=0; Gab < nirreps; Gab++) {
1320
Gc = Gab ^ Gijk ^ GX3;
1321
for(ab=0; ab < FBB->params->coltot[Gab]; ab++) {
1322
A = FBB->params->colorb[Gab][ab][0];
1323
B = FBB->params->colorb[Gab][ab][1];
1324
Gb = FBB->params->ssym[B];
1325
b = B - bvir_off[Gb];
1326
for(c=0; c < avirtpi[Gc]; c++) {
1327
C = avir_off[Gc] + c;
1328
ac = WmAfE->params->colidx[A][C];
1329
W3[Gb][b][ac] = W1[Gab][ab][c];
1334
jk = SiJaB.params->rowidx[J][K];
1336
for(Gd=0; Gd < nirreps; Gd++) {
1339
Gb = Gac ^ Gijk ^ GX3;
1341
id = WmAfE->row_offset[Gid][I];
1342
WmAfE->matrix[Gid] = dpd_block_matrix(avirtpi[Gd], WmAfE->params->coltot[Gid^GH]);
1343
dpd_buf4_mat_irrep_rd_block(WmAfE, Gid, id, avirtpi[Gd]);
1344
Z = block_matrix(bvirtpi[Gb], avirtpi[Gd]);
1346
nrows = bvirtpi[Gb];
1347
ncols = avirtpi[Gd];
1348
nlinks = WmAfE->params->coltot[Gid^GH];
1350
if(nrows && ncols && nlinks)
1351
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W3[Gb][0], nlinks,
1352
WmAfE->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
1354
for(b=0; b < bvirtpi[Gb]; b++) {
1355
B = bvir_off[Gb] + b;
1356
for(d=0; d < avirtpi[Gd]; d++) {
1357
DD = avir_off[Gd] + d;
1358
bd = SiJaB.params->colidx[B][DD];
1359
SiJaB.matrix[Gjk][jk][bd] += Z[b][d];
1363
dpd_free_block(WmAfE->matrix[Gid], avirtpi[Gd], WmAfE->params->coltot[Gid^GH]);
1367
/* S_miab <--- +t_ijKabC W_jKmC */
1368
/* S_imab <--- -t_ijKabC W_jKmC */
1370
jk = WmNiE->params->rowidx[J][K];
1372
for(Gm=0; Gm < nirreps; Gm++) {
1375
Gc = Gab ^ Gijk ^ GX3;
1377
mc = WmNiE->col_offset[Gjk][Gm];
1379
nrows = Sijab->params->coltot[Gab];
1381
nlinks = avirtpi[Gc];
1383
Z = dpd_block_matrix(nrows, ncols);
1385
if(nrows && ncols && nlinks)
1386
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W1[Gab][0], nlinks,
1387
&(WmNiE->matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols);
1389
for(m=0; m < ncols; m++) {
1390
M = bocc_off[Gm] + m;
1391
mi = Sijab->params->rowidx[M][I];
1392
im = Sijab->params->rowidx[I][M];
1393
for(ab=0; ab < nrows; ab++) {
1394
Sijab->matrix[Gmi][mi][ab] += Z[ab][m];
1395
Sijab->matrix[Gmi][im][ab] -= Z[ab][m];
1399
dpd_free_block(Z, nrows, ncols);
1402
/* t_mKbC <-- 1/2 t_ijKabC W_ijma */
1403
/* sort W(ab,C) to W(a,bC) */
1404
for(Gab=0; Gab < nirreps; Gab++) {
1405
Gc = Gab ^ Gijk ^ GX3;
1406
for(ab=0; ab < FBB->params->coltot[Gab]; ab++ ){
1407
A = FBB->params->colorb[Gab][ab][0];
1408
B = FBB->params->colorb[Gab][ab][1];
1409
Ga = FBB->params->rsym[A];
1410
a = A - bvir_off[Ga];
1411
for(c=0; c < avirtpi[Gc]; c++) {
1412
C = avir_off[Gc] + c;
1413
bc = SiJaB.params->colidx[B][C];
1414
W3[Ga][a][bc] = W1[Gab][ab][c];
1419
ij = Wmnie->params->rowidx[I][J];
1421
for(Gm=0; Gm < nirreps; Gm++) {
1424
Ga = Gbc ^ Gijk ^ GX3;
1426
ma = Wmnie->col_offset[Gij][Gm];
1428
nrows = SiJaB.params->coltot[Gmk^GS];
1430
nlinks = bvirtpi[Ga];
1432
Z = dpd_block_matrix(nrows, ncols);
1434
if(nrows && ncols && nlinks)
1435
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W3[Ga][0], nrows,
1436
&(Wmnie->matrix[Gij][ij][ma]), nlinks, 0.0, Z[0], ncols);
1438
for(m=0; m < boccpi[Gm]; m++) {
1439
M = bocc_off[Gm] + m;
1440
mk = SiJaB.params->rowidx[M][K];
1441
for(bc=0; bc < nrows; bc++) {
1442
SiJaB.matrix[Gmk][mk][bc] += Z[bc][m];
1446
dpd_free_block(Z, nrows, ncols);
1449
/* S_iMbC <-- t_ijKabC W_KjMa */
1450
/* sort W(ab,C) to W(a,bC) */
1451
for(Gab=0; Gab < nirreps; Gab++) {
1452
Gc = Gab ^ Gijk ^ GX3;
1453
for(ab=0; ab < FBB->params->coltot[Gab]; ab++ ){
1454
A = FBB->params->colorb[Gab][ab][0];
1455
B = FBB->params->colorb[Gab][ab][1];
1456
Ga = FBB->params->rsym[A];
1457
a = A - bvir_off[Ga];
1458
for(c=0; c < avirtpi[Gc]; c++) {
1459
C = avir_off[Gc] + c;
1460
bc = SiJaB.params->colidx[B][C];
1461
W3[Ga][a][bc] = W1[Gab][ab][c];
1466
kj = WMnIe->params->rowidx[K][J];
1468
for(Gm=0; Gm < nirreps; Gm++) {
1471
Ga = Gbc ^ Gijk ^ GX3;
1473
ma = WMnIe->col_offset[Gjk][Gm];
1475
nrows = SiJaB.params->coltot[Gim^GS];
1477
nlinks = bvirtpi[Ga];
1479
Z = dpd_block_matrix(nrows, ncols);
1481
if(nrows && ncols && nlinks)
1482
C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, W3[Ga][0], nrows,
1483
&(WMnIe->matrix[Gjk][kj][ma]), nlinks, 0.0, Z[0], ncols);
1485
for(m=0; m < aoccpi[Gm]; m++) {
1486
M = aocc_off[Gm] + m;
1487
im = SiJaB.params->rowidx[I][M];
1488
for(bc=0; bc < nrows; bc++) {
1489
SiJaB.matrix[Gim][im][bc] += Z[bc][m];
1493
dpd_free_block(Z, nrows, ncols);
1495
} /* end do_doubles */
1501
for(Gab=0; Gab < nirreps; Gab++) {
1502
Gc = Gab ^ Gijk ^ GX3;
1503
dpd_free_block(W1[Gab], FBB->params->coltot[Gab], avirtpi[Gc]);
1505
for(Ga=0; Ga < nirreps; Ga++) {
1506
Gcb = Ga ^ Gijk ^ GX3;
1507
dpd_free_block(W2[Ga], bvirtpi[Ga], WMaFe->params->coltot[Gcb]);
1509
for(Gb=0; Gb < nirreps; Gb++) {
1510
Gac = Gb ^ Gijk ^ GX3;
1511
dpd_free_block(W3[Gb], bvirtpi[Gb], WmAfE->params->coltot[Gac]);
1520
free_int_matrix(W_offset, nirreps);
1522
dpd_file2_close(&fIJ);
1523
dpd_file2_close(&fAB);
1524
dpd_file2_close(&fij);
1525
dpd_file2_close(&fab);
1529
dpd_file2_mat_wrt(SIA);
1530
dpd_file2_mat_close(SIA);
1531
dpd_file2_mat_wrt(Sia);
1532
dpd_file2_mat_close(Sia);
1534
for(h=0; h < nirreps; h++) {
1535
dpd_buf4_mat_irrep_close(DBB, h);
1536
dpd_buf4_mat_irrep_close(DBA, h);
1542
dpd_file2_mat_close(FME);
1543
dpd_file2_mat_close(Fme);
1545
for(h=0; h < nirreps; h++) {
1546
dpd_buf4_mat_irrep_close(WmNiE, h);
1547
dpd_buf4_mat_irrep_close(Wmnie, h);
1548
dpd_buf4_mat_irrep_close(WMnIe, h);
1551
for(h=0; h < nirreps; h++) {
1552
dpd_buf4_mat_irrep_wrt(Sijab, h);
1553
dpd_buf4_mat_irrep_close(Sijab, h);
1555
for(h=0; h < nirreps; h++) {
1556
dpd_buf4_mat_irrep_wrt(&SiJaB, h);
1557
dpd_buf4_mat_irrep_close(&SiJaB, h);
1559
dpd_buf4_sort(&SiJaB, CC_TMP0, qpsr, 22, 28, "CC3 SIjAb");
1560
dpd_buf4_close(&SiJaB);
1561
dpd_buf4_init(&SiJaB, CC_TMP0, S_irr, 22, 28, 22, 28, 0, "CC3 SIjAb");
1562
dpd_buf4_axpy(&SiJaB, SIjAb, 1.0);
1563
dpd_buf4_close(&SiJaB);