3
\brief Enter brief description of file here
9
#include <libciomr/libciomr.h>
11
#include <libdpd/dpd.h>
17
This function computes contributions to singles and doubles of
18
matrix elements of triples:
19
SIA <-- <S|(Dints) <T|(Wmbij,Wabei) CMNEF |0> |T> / (w-wt)
20
SIjAb <-- <D|(FME,WAmEf,WMnIe) <T|(Wmbij,Wabei) CMNEF |0> |T> / (w-wt)
21
These are used to make X3 quantity in T3_RHF:
22
CIjAb, WAbEi, WMbIj, fIJ, fAB, omega
25
void cc3_sigma_UHF_AAA(dpdbuf4 *CMNEF, dpdbuf4 *WABEI, dpdbuf4 *WMBIJ,
26
int do_singles, dpdbuf4 *Dints_anti, dpdfile2 *SIA, int do_doubles, dpdfile2 *FME,
27
dpdbuf4 *WMAFE, dpdbuf4 *WMNIE, dpdbuf4 *SIJAB, int *aoccpi, int *aocc_off,
28
int *avirtpi, int *avir_off, double omega, FILE *outfile)
31
int *occ_off, *occpi, *vir_off, *virtpi;
32
int Gi, Gj, Gk, Gijk, Ga, Gb, Gc;
35
int Gij, ij, Gab, ab, Gjk, jk;
38
int nrows, ncols, nlinks;
39
int Gd, d, cd, dc, Gid, id, DD;
40
int Gm, m, Gmi, mi, im, mc, M;
41
int GS, GH, GU, GC, GX3;
43
GC = CMNEF->file.my_irrep;
45
GU = WMBIJ->file.my_irrep;
48
GH = Dints_anti->file.my_irrep;
50
GH = WMAFE->file.my_irrep;
52
GS = SIJAB->file.my_irrep;
56
nirreps = CMNEF->params->nirreps;
62
dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ");
63
dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB");
66
dpd_file2_mat_init(SIA);
67
dpd_file2_mat_rd(SIA);
69
for(h=0; h < nirreps; h++) {
70
dpd_buf4_mat_irrep_init(Dints_anti, h);
71
dpd_buf4_mat_irrep_rd(Dints_anti, h);
76
dpd_file2_mat_init(FME);
77
dpd_file2_mat_rd(FME);
79
for(h=0; h < nirreps; h++) {
80
dpd_buf4_mat_irrep_init(SIJAB, h);
81
dpd_buf4_mat_irrep_rd(SIJAB, h);
83
for(h=0; h < nirreps; h++) {
84
dpd_buf4_mat_irrep_init(WMNIE, h);
85
dpd_buf4_mat_irrep_rd(WMNIE, h);
89
/* target T3 amplitudes go in here */
90
W1 = (double ***) malloc(nirreps * sizeof(double **));
92
for(Gi=0; Gi < nirreps; Gi++) {
93
for(Gj=0; Gj < nirreps; Gj++) {
95
for(Gk=0; Gk < nirreps; Gk++) {
99
for(Gab=0; Gab < nirreps; Gab++) {
101
Gc = Gab ^ Gijk ^ GX3;
102
W1[Gab] = dpd_block_matrix(WABEI->params->coltot[Gab], virtpi[Gc]);
105
for(i=0; i < occpi[Gi]; i++) {
107
for(j=0; j < occpi[Gj]; j++) {
109
for(k=0; k < occpi[Gk]; k++) {
112
T3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, CMNEF, WABEI, WMBIJ, &fIJ, &fAB,
113
occpi, occ_off, virtpi, vir_off, omega);
116
/* t_KC <-- 1/4 t_IJKABC <IJ||AB> */
118
Gc = Gk ^ GS; /* changed */
119
Gab = Gij ^ GH ; /* changed */
121
ij = Dints_anti->params->rowidx[I][J];
123
nrows = Dints_anti->params->coltot[Gij^GH]; /* changed */
127
C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, Dints_anti->matrix[Gij][ij], 1,
128
1.0, SIA->matrix[Gk][k], 1);
132
/* t_IJAB <-- t_IJKABC F_KC */
136
nrows = SIJAB->params->coltot[Gij^GS];
138
ij = SIJAB->params->rowidx[I][J];
141
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, FME->matrix[Gk][k], 1,
142
1.0, SIJAB->matrix[Gij][ij], 1);
144
/* t_JKDC <-- +1/2 t_IJKABC W_IDAB */
145
/* t_JKCD <-- -1/2 t_IJKABC W_IDAB */
146
jk = SIJAB->params->rowidx[J][K];
147
for(Gd=0; Gd < nirreps; Gd++) {
150
Gc = Gab ^ Gijk ^ GX3;
152
id = WMAFE->row_offset[Gid][I];
154
Z = block_matrix(virtpi[Gc],virtpi[Gd]);
155
WMAFE->matrix[Gid] = dpd_block_matrix(virtpi[Gd], WMAFE->params->coltot[Gid^GH]);
156
dpd_buf4_mat_irrep_rd_block(WMAFE, Gid, id, virtpi[Gd]);
160
nlinks = WMAFE->params->coltot[Gid^GH];
162
if(nrows && ncols && nlinks)
163
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows,
164
WMAFE->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
166
for(c=0; c < virtpi[Gc]; c++) {
168
for(d=0; d < virtpi[Gd]; d++) {
169
DD = vir_off[Gd] + d;
170
cd = SIJAB->params->colidx[C][DD];
171
dc = SIJAB->params->colidx[DD][C];
172
SIJAB->matrix[Gjk][jk][dc] += Z[c][d];
173
SIJAB->matrix[Gjk][jk][cd] += -Z[c][d];
176
dpd_free_block(WMAFE->matrix[Gid], virtpi[Gd], WMAFE->params->coltot[Gid^GH]);
181
/* S_MIAB <-- +1/2 t_IJKABC W_JKMC */
182
/* S_IMAB <-- -1/2 t_IJKABC W_JKMC */
183
jk = WMNIE->params->rowidx[J][K];
184
for(Gm=0; Gm < nirreps; Gm++) {
187
Gc = Gab ^ Gijk ^ GX3;
189
mc = WMNIE->col_offset[Gjk][Gm];
191
nrows = WABEI->params->coltot[Gab];
195
Z = dpd_block_matrix(nrows, ncols);
197
if(nrows && ncols && nlinks)
198
C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nlinks,
199
&(WMNIE->matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols);
201
for(m=0; m < ncols; m++) {
203
mi = SIJAB->params->rowidx[M][I];
204
im = SIJAB->params->rowidx[I][M];
205
for(ab=0; ab < nrows; ab++) {
206
SIJAB->matrix[Gmi][mi][ab] += Z[ab][m];
207
SIJAB->matrix[Gmi][im][ab] -= Z[ab][m];
211
dpd_free_block(Z, nrows, ncols);
213
} /* end do_doubles */
219
for(Gab=0; Gab < nirreps; Gab++) {
220
/* This will need to change for non-totally-symmetric cases */
222
dpd_free_block(W1[Gab], WABEI->params->coltot[Gab], virtpi[Gc]);
231
dpd_file2_close(&fIJ);
232
dpd_file2_close(&fAB);
236
dpd_file2_mat_wrt(SIA);
237
dpd_file2_mat_close(SIA);
239
for(h=0; h < nirreps; h++)
240
dpd_buf4_mat_irrep_close(Dints_anti, h);
245
dpd_file2_mat_close(FME);
247
for(h=0; h < nirreps; h++)
248
dpd_buf4_mat_irrep_close(WMNIE, h);
250
for(h=0; h < nirreps; h++) {
251
dpd_buf4_mat_irrep_wrt(SIJAB, h);
252
dpd_buf4_mat_irrep_close(SIJAB, h);
257
void cc3_sigma_UHF_BBB(dpdbuf4 *Cmnef, dpdbuf4 *Wabei, dpdbuf4 *Wmbij,
258
int do_singles, dpdbuf4 *Dijab_anti, dpdfile2 *Sia, int do_doubles,
259
dpdfile2 *Fme, dpdbuf4 *Wmafe, dpdbuf4 *Wmnie, dpdbuf4 *Sijab,
260
int *boccpi, int *bocc_off, int *bvirtpi, int *bvir_off,
261
double omega, FILE *outfile)
264
int *occ_off, *occpi, *vir_off, *virtpi;
265
int Gi, Gj, Gk, Gijk, Ga, Gb, Gc;
266
int i, j, k, I, J, K;
267
int a, b, c, A, B, C;
268
int Gij, ij, Gab, ab, Gjk, jk;
271
int nrows, ncols, nlinks;
272
int Gd, d, cd, dc, Gid, id, DD;
273
int Gm, m, Gmi, mi, im, mc, M;
274
int GS, GH, GU, GC, GX3;
276
GC = Cmnef->file.my_irrep;
277
GU = Wmbij->file.my_irrep;
280
GH = Dijab_anti->file.my_irrep;
282
GH = Wmafe->file.my_irrep;
284
GS = Sijab->file.my_irrep;
287
nirreps = Cmnef->params->nirreps;
293
dpd_file2_init(&fIJ, CC_OEI, 0, 2, 2, "fij");
294
dpd_file2_init(&fAB, CC_OEI, 0, 3, 3, "fab");
298
dpd_file2_mat_init(Sia);
299
dpd_file2_mat_rd(Sia);
301
for(h=0; h < nirreps; h++) {
302
dpd_buf4_mat_irrep_init(Dijab_anti, h);
303
dpd_buf4_mat_irrep_rd(Dijab_anti, h);
309
dpd_file2_mat_init(Fme);
310
dpd_file2_mat_rd(Fme);
312
for(h=0; h < nirreps; h++) {
313
dpd_buf4_mat_irrep_init(Sijab, h);
314
dpd_buf4_mat_irrep_rd(Sijab, h);
317
for(h=0; h < nirreps; h++) {
318
dpd_buf4_mat_irrep_init(Wmnie, h);
319
dpd_buf4_mat_irrep_rd(Wmnie, h);
323
/* target T3 amplitudes go in here */
324
W1 = (double ***) malloc(nirreps * sizeof(double **));
326
for(Gi=0; Gi < nirreps; Gi++) {
327
for(Gj=0; Gj < nirreps; Gj++) {
329
for(Gk=0; Gk < nirreps; Gk++) {
333
for(Gab=0; Gab < nirreps; Gab++) {
334
Gc = Gab ^ Gijk ^ GX3;
335
W1[Gab] = dpd_block_matrix(Wabei->params->coltot[Gab], virtpi[Gc]);
338
for(i=0; i < occpi[Gi]; i++) {
340
for(j=0; j < occpi[Gj]; j++) {
342
for(k=0; k < occpi[Gk]; k++) {
345
T3_AAA(W1, nirreps, I, Gi, J, Gj, K, Gk, Cmnef, Wabei, Wmbij, &fIJ, &fAB,
346
occpi, occ_off, virtpi, vir_off, omega);
350
/* S_kc <-- 1/4 t_ijkabc <ij||ab> */
354
ij = Dijab_anti->params->rowidx[I][J];
356
nrows = Dijab_anti->params->coltot[Gij^GH];
360
C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, Dijab_anti->matrix[Gij][ij], 1,
361
1.0, Sia->matrix[Gk][k], 1);
366
/* S_ijab <-- t_ijkabc F_kc */
370
nrows = Sijab->params->coltot[Gij^GS];
372
ij = Sijab->params->rowidx[I][J];
375
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, Fme->matrix[Gk][k], 1,
376
1.0, Sijab->matrix[Gij][ij], 1);
378
/* S_jkdc <-- 1/2 t_ijkabc W_idab */
379
/* S_jkcd <-- -1/2 t_ijkabc W_idab */
380
jk = Sijab->params->rowidx[J][K];
381
for(Gd=0; Gd < nirreps; Gd++) {
385
Gc = Gab ^ Gijk ^ GX3;
387
id = Wmafe->row_offset[Gid][I];
389
Z = block_matrix(virtpi[Gc],virtpi[Gd]);
390
Wmafe->matrix[Gid] = dpd_block_matrix(virtpi[Gd], Wmafe->params->coltot[Gid^GH]);
391
dpd_buf4_mat_irrep_rd_block(Wmafe, Gid, id, virtpi[Gd]);
395
nlinks = Wmafe->params->coltot[Gid^GH];
397
if(nrows && ncols && nlinks)
398
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows,
399
Wmafe->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
401
for(c=0; c < virtpi[Gc]; c++) {
403
for(d=0; d < virtpi[Gd]; d++) {
404
DD = vir_off[Gd] + d;
405
cd = Sijab->params->colidx[C][DD];
406
dc = Sijab->params->colidx[DD][C];
407
Sijab->matrix[Gjk][jk][dc] += Z[c][d];
408
Sijab->matrix[Gjk][jk][cd] += -Z[c][d];
411
dpd_free_block(Wmafe->matrix[Gid], virtpi[Gd], Wmafe->params->coltot[Gid^GH]);
415
/* S_miab <-- +1/2 t_ijkabc W_jkmc */
416
/* S_imab <-- -1/2 t_ijkabc W_jkmc */
417
jk = Wmnie->params->rowidx[J][K];
418
for(Gm=0; Gm < nirreps; Gm++) {
421
Gc = Gab ^ Gijk ^ GX3;
423
mc = Wmnie->col_offset[Gjk][Gm];
425
nrows = Wabei->params->coltot[Gab];
429
Z = dpd_block_matrix(nrows, ncols);
431
if(nrows && ncols && nlinks)
432
C_DGEMM('n', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nlinks,
433
&(Wmnie->matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols);
435
for(m=0; m < ncols; m++) {
437
mi = Sijab->params->rowidx[M][I];
438
im = Sijab->params->rowidx[I][M];
439
for(ab=0; ab < nrows; ab++) {
440
Sijab->matrix[Gmi][mi][ab] += Z[ab][m];
441
Sijab->matrix[Gmi][im][ab] -= Z[ab][m];
445
dpd_free_block(Z, nrows, ncols);
447
} /* end do_doubles */
453
for(Gab=0; Gab < nirreps; Gab++) {
454
/* This will need to change for non-totally-symmetric cases */
456
dpd_free_block(W1[Gab], Wabei->params->coltot[Gab], virtpi[Gc]);
465
dpd_file2_close(&fIJ);
466
dpd_file2_close(&fAB);
470
dpd_file2_mat_wrt(Sia);
471
dpd_file2_mat_close(Sia);
473
for(h=0; h < nirreps; h++)
474
dpd_buf4_mat_irrep_close(Dijab_anti, h);
479
dpd_file2_mat_close(Fme);
481
for(h=0; h < nirreps; h++)
482
dpd_buf4_mat_irrep_close(Wmnie, h);
484
for(h=0; h < nirreps; h++) {
485
dpd_buf4_mat_irrep_wrt(Sijab, h);
486
dpd_buf4_mat_irrep_close(Sijab, h);
491
void cc3_sigma_UHF_AAB(dpdbuf4 *C2AA, dpdbuf4 *C2AB, dpdbuf4 *C2BA,
492
dpdbuf4 *FAA, dpdbuf4 *FAB, dpdbuf4 *FBA,
493
dpdbuf4 *EAA, dpdbuf4 *EAB, dpdbuf4 *EBA,
494
int do_singles, dpdbuf4 *DAA, dpdbuf4 *DAB, dpdfile2 *SIA, dpdfile2 *Sia,
495
int do_doubles, dpdfile2 *FME, dpdfile2 *Fme,
496
dpdbuf4 *WMAFE, dpdbuf4 *WMaFe, dpdbuf4 *WmAfE,
497
dpdbuf4 *WMNIE, dpdbuf4 *WMnIe, dpdbuf4 *WmNiE,
498
dpdbuf4 *SIJAB, dpdbuf4 *SIjAb, int *aoccpi, int *aocc_off, int *boccpi,
499
int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off,
500
double omega, FILE *outfile)
503
int Gi, Gj, Gk, Gijk;
505
int Gij, ij, ji, Gjk, jk, Gbc, bc, Gcb, cb;
506
int Gd, Gkd, kd, d, DD, ad, da, dc, Gid, id, Gac, ac, bd;
507
int i, j, k, I, J, K;
508
int a, b, c, A, B, C;
510
double ***W1, ***W2, ***W3;
511
dpdfile2 fIJ, fAB, fij, fab;
512
int nrows, ncols, nlinks;
513
int **W_offset, offset;
515
int Gm, m, Gmi, mi, im, mc, M;
516
int Gmk, mk, ma, kj, Gim;
517
int GS, GH, GU, GC, GX3;
519
GC = C2AA->file.my_irrep;
520
GU = EAA->file.my_irrep;
523
GH = DAA->file.my_irrep;
525
GH = WMAFE->file.my_irrep;
527
GS = SIJAB->file.my_irrep;
530
nirreps = C2AA->params->nirreps;
532
W_offset = init_int_matrix(nirreps, nirreps);
533
for(Gab=0; Gab < nirreps; Gab++) {
534
for(Ga=0,offset=0; Ga < nirreps; Ga++) {
536
W_offset[Gab][Ga] = offset;
537
offset += avirtpi[Ga] * avirtpi[Gb];
542
dpd_file2_mat_init(SIA);
543
dpd_file2_mat_rd(SIA);
544
dpd_file2_mat_init(Sia);
545
dpd_file2_mat_rd(Sia);
547
for(h=0; h < nirreps; h++) {
548
dpd_buf4_mat_irrep_init(DAA, h);
549
dpd_buf4_mat_irrep_rd(DAA, h);
550
dpd_buf4_mat_irrep_init(DAB, h);
551
dpd_buf4_mat_irrep_rd(DAB, h);
556
dpd_file2_mat_init(FME);
557
dpd_file2_mat_rd(FME);
558
dpd_file2_mat_init(Fme);
559
dpd_file2_mat_rd(Fme);
561
for(h=0; h < nirreps; h++) {
562
dpd_buf4_mat_irrep_init(WMnIe, h);
563
dpd_buf4_mat_irrep_rd(WMnIe, h);
565
dpd_buf4_mat_irrep_init(WMNIE, h);
566
dpd_buf4_mat_irrep_rd(WMNIE, h);
568
dpd_buf4_mat_irrep_init(WmNiE, h);
569
dpd_buf4_mat_irrep_rd(WmNiE, h);
571
for(h=0; h < nirreps; h++) {
572
dpd_buf4_mat_irrep_init(SIJAB, h);
573
dpd_buf4_mat_irrep_rd(SIJAB, h);
575
for(h=0; h < nirreps; h++) {
576
dpd_buf4_mat_irrep_init(SIjAb, h);
577
dpd_buf4_mat_irrep_rd(SIjAb, h);
581
dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ");
582
dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB");
583
dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij");
584
dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab");
586
/* target T3 amplitudes go in here */
587
W1 = (double ***) malloc(nirreps * sizeof(double **));
588
W2 = (double ***) malloc(nirreps * sizeof(double **));
589
W3 = (double ***) malloc(nirreps * sizeof(double **));
591
for(Gi=0; Gi < nirreps; Gi++) {
592
for(Gj=0; Gj < nirreps; Gj++) {
594
for(Gk=0; Gk < nirreps; Gk++) {
598
for(Gab=0; Gab < nirreps; Gab++) {
599
Gc = Gab ^ Gijk ^ GX3;
600
W1[Gab] = dpd_block_matrix(FAA->params->coltot[Gab], bvirtpi[Gc]);
602
for(Ga=0; Ga < nirreps; Ga++) {
603
Gcb = Ga ^ Gijk ^ GX3;
604
W2[Ga] = dpd_block_matrix(avirtpi[Ga], WmAfE->params->coltot[Gcb]); /* alpha-beta-alpha */
606
for(Gb=0; Gb < nirreps; Gb++) {
607
Gac = Gb ^ Gijk ^ GX3;
608
W3[Gb] = dpd_block_matrix(avirtpi[Gb], WMaFe->params->coltot[Gac]); /* alpha-alpha-beta */
611
for(i=0; i < aoccpi[Gi]; i++) {
612
I = aocc_off[Gi] + i;
613
for(j=0; j < aoccpi[Gj]; j++) {
614
J = aocc_off[Gj] + j;
615
for(k=0; k < boccpi[Gk]; k++) {
616
K = bocc_off[Gk] + k;
618
T3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, C2AA, C2AB, C2BA,
619
FAA, FAB, FBA, EAA, EAB, EBA, &fIJ, &fij, &fAB, &fab,
620
aoccpi, aocc_off, boccpi, bocc_off, avirtpi, avir_off, bvirtpi, bvir_off, omega);
624
/* S_kc <-- 1/4 t_IJkABc <IJ||AB> */
629
ij = DAA->params->rowidx[I][J];
631
nrows = DAA->params->coltot[Gij^GH];
635
C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, DAA->matrix[Gij][ij], 1,
636
1.0, Sia->matrix[Gk][k], 1);
638
/* S_IA <-- t_IJkABc <Jk|Bc> */
643
jk = DAB->params->rowidx[J][K];
645
for(Gab=0; Gab < nirreps; Gab++) {
649
ab = W_offset[Gab][Ga];
650
bc = DAB->col_offset[Gjk][Gb];
653
ncols = avirtpi[Gb] * bvirtpi[Gc];
656
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][ab], ncols, &(DAB->matrix[Gjk][jk][bc]), 1,
657
1.0, SIA->matrix[Gi][i], 1);
662
/* S_IJAB <-- t_IJkABc F_kc */
666
nrows = SIJAB->params->coltot[Gij^GS];
668
ij = SIJAB->params->rowidx[I][J];
671
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, Fme->matrix[Gk][k], 1,
672
1.0, SIJAB->matrix[Gij][ij], 1);
674
/* S_JkBc <-- t_IJkABc F_IA */
678
jk = C2AB->params->rowidx[J][K];
680
for(Gab=0; Gab < nirreps; Gab++) {
684
ab = W_offset[Gab][Ga];
685
bc = SIjAb->col_offset[Gjk][Gb];
688
ncols = avirtpi[Gb] * bvirtpi[Gc];
691
C_DGEMV('t', nrows, ncols, 1.0, W1[Gab][ab], ncols, FME->matrix[Gi][i], 1,
692
1.0, &(SIjAb->matrix[Gjk][jk][bc]), 1);
695
/* S_JIDA <-- t_IJkABc W_kDcB */
696
/* sort W1(AB,c) to W2(A,cB) */
697
for(Gab=0; Gab < nirreps; Gab++) {
698
Gc = Gab ^ Gijk ^ GX3;
699
for(ab=0; ab < FAA->params->coltot[Gab]; ab++) {
700
A = FAA->params->colorb[Gab][ab][0];
701
B = FAA->params->colorb[Gab][ab][1];
702
Ga = FAA->params->rsym[A];
703
a = A - avir_off[Ga];
704
for(c=0; c < bvirtpi[Gc]; c++) {
705
C = bvir_off[Gc] + c;
706
cb = WmAfE->params->colidx[C][B];
707
W2[Ga][a][cb] = W1[Gab][ab][c];
712
ji = SIJAB->params->rowidx[J][I];
714
for(Gd=0; Gd < nirreps; Gd++) {
719
kd = WmAfE->row_offset[Gkd][K];
720
WmAfE->matrix[Gkd] = dpd_block_matrix(avirtpi[Gd], WmAfE->params->coltot[Gkd^GH]);
721
dpd_buf4_mat_irrep_rd_block(WmAfE, Gkd, kd, avirtpi[Gd]);
722
Z = block_matrix(avirtpi[Ga], avirtpi[Gd]);
726
nlinks = WmAfE->params->coltot[Gkd^GH];
728
if(nrows && ncols && nlinks)
729
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W2[Ga][0], nlinks,
730
WmAfE->matrix[Gkd][0], nlinks, 0.0, Z[0], ncols);
732
for(a=0; a < avirtpi[Ga]; a++) {
733
A = avir_off[Ga] + a;
734
for(d=0; d < avirtpi[Gd]; d++) {
735
DD = avir_off[Gd] + d;
736
ad = SIJAB->params->colidx[A][DD];
737
da = SIJAB->params->colidx[DD][A];
738
SIJAB->matrix[Gij][ji][ad] += -Z[a][d];
739
SIJAB->matrix[Gij][ji][da] += Z[a][d];
743
dpd_free_block(WmAfE->matrix[Gkd], avirtpi[Gd], WmAfE->params->coltot[Gkd^GH]);
747
/* S_JkDc <-- 1/2 t_IJkABc W_IDAB */
749
jk = SIjAb->params->rowidx[J][K];
751
for(Gd=0; Gd < nirreps; Gd++) {
754
Gc = Gab ^ Gijk ^ GX3;
756
id = WMAFE->row_offset[Gid][I];
757
WMAFE->matrix[Gid] = dpd_block_matrix(avirtpi[Gd], WMAFE->params->coltot[Gid^GH]);
758
dpd_buf4_mat_irrep_rd_block(WMAFE, Gid, id, avirtpi[Gd]);
759
Z = block_matrix(bvirtpi[Gc], avirtpi[Gd]);
763
nlinks = WMAFE->params->coltot[Gid^GH];
765
if(nrows && ncols && nlinks)
766
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows,
767
WMAFE->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
769
for(c=0; c < bvirtpi[Gc]; c++) {
770
C = bvir_off[Gc] + c;
771
for(d=0; d < avirtpi[Gd]; d++) {
772
DD = avir_off[Gd] + d;
773
dc = SIjAb->params->colidx[DD][C];
774
SIjAb->matrix[Gjk][jk][dc] += Z[c][d];
779
dpd_free_block(WMAFE->matrix[Gid], avirtpi[Gd], WMAFE->params->coltot[Gid^GH]);
782
/* t_JkBd <-- t_IJkABc W_IdAc */
783
/* sort W1(AB,c) to W3(B,Ac) */
784
for(Gab=0; Gab < nirreps; Gab++) {
785
Gc = Gab ^ Gijk ^ GX3;
786
for(ab=0; ab < FAA->params->coltot[Gab]; ab++) {
787
A = FAA->params->colorb[Gab][ab][0];
788
B = FAA->params->colorb[Gab][ab][1];
789
Gb = FAA->params->ssym[B];
790
b = B - avir_off[Gb];
791
for(c=0; c < bvirtpi[Gc]; c++) {
792
C = bvir_off[Gc] + c;
793
ac = WMaFe->params->colidx[A][C];
794
W3[Gb][b][ac] = W1[Gab][ab][c];
799
jk = SIjAb->params->rowidx[J][K];
801
for(Gd=0; Gd < nirreps; Gd++) {
804
Gb = Gac ^ Gijk ^ GX3;
806
id = WMaFe->row_offset[Gid][I];
807
WMaFe->matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], WMaFe->params->coltot[Gid^GH]);
808
dpd_buf4_mat_irrep_rd_block(WMaFe, Gid, id, bvirtpi[Gd]);
809
Z = block_matrix(avirtpi[Gb], bvirtpi[Gd]);
813
nlinks = WMaFe->params->coltot[Gid^GH];
815
if(nrows && ncols && nlinks)
816
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W3[Gb][0], nlinks,
817
WMaFe->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
819
for(b=0; b < avirtpi[Gb]; b++) {
820
B = avir_off[Gb] + b;
821
for(d=0; d < bvirtpi[Gd]; d++) {
822
DD = bvir_off[Gd] + d;
823
bd = SIjAb->params->colidx[B][DD];
824
SIjAb->matrix[Gjk][jk][bd] += Z[b][d];
828
dpd_free_block(WMaFe->matrix[Gid], bvirtpi[Gd], WMaFe->params->coltot[Gid^GH]);
832
/* S_MIAB <--- +t_IJkABc W_JkMc */
833
/* S_IMAB <--- -t_IJkABc W_JkMc */
835
jk = WMnIe->params->rowidx[J][K];
837
for(Gm=0; Gm < nirreps; Gm++) {
840
Gc = Gab ^ Gijk ^ GX3;
842
mc = WMnIe->col_offset[Gjk][Gm];
844
nrows = FAA->params->coltot[Gab];
846
nlinks = bvirtpi[Gc];
848
Z = dpd_block_matrix(nrows, ncols);
850
if(nrows && ncols && nlinks)
851
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W1[Gab][0], nlinks,
852
&(WMnIe->matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols);
854
for(m=0; m < ncols; m++) {
855
M = aocc_off[Gm] + m;
856
mi = SIJAB->params->rowidx[M][I];
857
im = SIJAB->params->rowidx[I][M];
858
for(ab=0; ab < nrows; ab++) {
859
SIJAB->matrix[Gmi][mi][ab] += Z[ab][m];
860
SIJAB->matrix[Gmi][im][ab] -= Z[ab][m];
864
dpd_free_block(Z, nrows, ncols);
867
/* t_MkBc <-- 1/2 t_IJkABc W_IJMA */
868
/* sort W(AB,c) to W(A,Bc) */
869
for(Gab=0; Gab < nirreps; Gab++) {
870
Gc = Gab ^ Gijk ^ GX3;
871
for(ab=0; ab < FAA->params->coltot[Gab]; ab++ ){
872
A = FAA->params->colorb[Gab][ab][0];
873
B = FAA->params->colorb[Gab][ab][1];
874
Ga = FAA->params->rsym[A];
875
a = A - avir_off[Ga];
876
for(c=0; c < bvirtpi[Gc]; c++) {
877
C = bvir_off[Gc] + c;
878
bc = SIjAb->params->colidx[B][C];
879
W3[Ga][a][bc] = W1[Gab][ab][c];
884
ij = WMNIE->params->rowidx[I][J];
886
for(Gm=0; Gm < nirreps; Gm++) {
889
Ga = Gbc ^ Gijk ^ GX3;
891
ma = WMNIE->col_offset[Gij][Gm];
893
nrows = SIjAb->params->coltot[Gmk^GS];
895
nlinks = avirtpi[Ga];
897
Z = dpd_block_matrix(nrows, ncols);
899
if(nrows && ncols && nlinks)
900
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W3[Ga][0], nrows,
901
&(WMNIE->matrix[Gij][ij][ma]), nlinks, 0.0, Z[0], ncols);
903
for(m=0; m < aoccpi[Gm]; m++) {
904
M = aocc_off[Gm] + m;
905
mk = SIjAb->params->rowidx[M][K];
906
for(bc=0; bc < nrows; bc++) {
907
SIjAb->matrix[Gmk][mk][bc] += Z[bc][m];
911
dpd_free_block(Z, nrows, ncols);
914
/* S_ImBc <-- t_IJkABc W_kJmA */
915
/* sort W(AB,c) to W(A,Bc) */
916
for(Gab=0; Gab < nirreps; Gab++) {
917
Gc = Gab ^ Gijk ^ GX3; /* assumes totally symmetric */
918
for(ab=0; ab < FAA->params->coltot[Gab]; ab++ ){
919
A = FAA->params->colorb[Gab][ab][0];
920
B = FAA->params->colorb[Gab][ab][1];
921
Ga = FAA->params->rsym[A];
922
a = A - avir_off[Ga];
923
for(c=0; c < bvirtpi[Gc]; c++) {
924
C = bvir_off[Gc] + c;
925
bc = SIjAb->params->colidx[B][C];
926
W3[Ga][a][bc] = W1[Gab][ab][c];
931
kj = WmNiE->params->rowidx[K][J];
933
for(Gm=0; Gm < nirreps; Gm++) {
936
Ga = Gbc ^ Gijk ^ GX3;
938
ma = WmNiE->col_offset[Gjk][Gm];
940
nrows = SIjAb->params->coltot[Gim^GS];
942
nlinks = avirtpi[Ga];
944
Z = dpd_block_matrix(nrows, ncols);
946
if(nrows && ncols && nlinks)
947
C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, W3[Ga][0], nrows,
948
&(WmNiE->matrix[Gjk][kj][ma]), nlinks, 0.0, Z[0], ncols);
950
for(m=0; m < boccpi[Gm]; m++) {
951
M = bocc_off[Gm] + m;
952
im = SIjAb->params->rowidx[I][M];
953
for(bc=0; bc < nrows; bc++) {
954
SIjAb->matrix[Gim][im][bc] += Z[bc][m];
958
dpd_free_block(Z, nrows, ncols);
966
for(Gab=0; Gab < nirreps; Gab++) {
967
/* This will need to change for non-totally-symmetric cases */
968
Gc = Gab ^ Gijk ^ GX3;
969
dpd_free_block(W1[Gab], FAA->params->coltot[Gab], bvirtpi[Gc]);
971
for(Ga=0; Ga < nirreps; Ga++) {
972
Gcb = Ga ^ Gijk ^ GX3; /* assumes totally symmetric */
973
dpd_free_block(W2[Ga], avirtpi[Ga], WmAfE->params->coltot[Gcb]);
975
for(Gb=0; Gb < nirreps; Gb++) {
976
Gac = Gb ^ Gijk ^ GX3; /* assumes totally symmetric */
977
dpd_free_block(W3[Gb], avirtpi[Gb], WMaFe->params->coltot[Gac]);
987
free_int_matrix(W_offset);
989
dpd_file2_close(&fIJ);
990
dpd_file2_close(&fAB);
991
dpd_file2_close(&fij);
992
dpd_file2_close(&fab);
996
dpd_file2_mat_wrt(SIA);
997
dpd_file2_mat_close(SIA);
998
dpd_file2_mat_wrt(Sia);
999
dpd_file2_mat_close(Sia);
1001
for(h=0; h < nirreps; h++) {
1002
dpd_buf4_mat_irrep_close(DAA, h);
1003
dpd_buf4_mat_irrep_close(DAB, h);
1009
dpd_file2_mat_close(FME);
1010
dpd_file2_mat_close(Fme);
1012
for(h=0; h < nirreps; h++) {
1013
dpd_buf4_mat_irrep_close(WMNIE, h);
1014
dpd_buf4_mat_irrep_close(WMnIe, h);
1015
dpd_buf4_mat_irrep_close(WmNiE, h);
1017
for(h=0; h < nirreps; h++) {
1018
dpd_buf4_mat_irrep_wrt(SIJAB, h);
1019
dpd_buf4_mat_irrep_close(SIJAB, h);
1021
for(h=0; h < nirreps; h++) {
1022
dpd_buf4_mat_irrep_wrt(SIjAb, h);
1023
dpd_buf4_mat_irrep_close(SIjAb, h);
1028
void cc3_sigma_UHF_BBA(dpdbuf4 *C2BB, dpdbuf4 *C2AB, dpdbuf4 *C2BA,
1029
dpdbuf4 *FBB, dpdbuf4 *FAB, dpdbuf4 *FBA,
1030
dpdbuf4 *EBB, dpdbuf4 *EAB, dpdbuf4 *EBA,
1031
int do_singles, dpdbuf4 *DBB, dpdbuf4 *DBA, dpdfile2 *SIA, dpdfile2 *Sia,
1032
int do_doubles, dpdfile2 *FME, dpdfile2 *Fme,
1033
dpdbuf4 *Wmafe, dpdbuf4 *WMaFe, dpdbuf4 *WmAfE,
1034
dpdbuf4 *Wmnie, dpdbuf4 *WMnIe, dpdbuf4 *WmNiE,
1035
dpdbuf4 *Sijab, dpdbuf4 *SIjAb, int *aoccpi, int *aocc_off, int *boccpi,
1036
int *bocc_off, int *avirtpi, int *avir_off, int *bvirtpi, int *bvir_off,
1037
double omega, FILE *outfile)
1039
int h, nirreps, S_irr;
1040
int Gi, Gj, Gk, Gijk;
1041
int Ga, Gb, Gc, Gab;
1042
int Gij, ij, ji, Gjk, jk, Gbc, bc, Gcb, cb;
1043
int Gd, Gkd, kd, d, DD, ad, da, dc, Gid, id, Gac, ac, bd;
1044
int i, j, k, I, J, K;
1045
int a, b, c, A, B, C;
1047
double ***W1, ***W2, ***W3;
1048
dpdfile2 fIJ, fAB, fij, fab;
1049
int nrows, ncols, nlinks;
1050
int **W_offset, offset;
1053
int Gm, m, Gmi, mi, im, mc, M;
1054
int Gmk, mk, ma, kj, Gim;
1055
int GS, GH, GU, GC, GX3;
1057
GC = C2BB->file.my_irrep;
1058
GU = EBB->file.my_irrep;
1061
GH = DBB->file.my_irrep;
1062
else if (do_doubles)
1063
GH = Wmafe->file.my_irrep;
1065
GS = Sijab->file.my_irrep;
1068
nirreps = C2BB->params->nirreps;
1070
W_offset = init_int_matrix(nirreps, nirreps);
1071
for(Gab=0; Gab < nirreps; Gab++) {
1072
for(Ga=0,offset=0; Ga < nirreps; Ga++) {
1074
W_offset[Gab][Ga] = offset;
1075
offset += bvirtpi[Ga] * bvirtpi[Gb];
1081
dpd_file2_mat_init(SIA);
1082
dpd_file2_mat_rd(SIA);
1083
dpd_file2_mat_init(Sia);
1084
dpd_file2_mat_rd(Sia);
1086
for(h=0; h < nirreps; h++) {
1087
dpd_buf4_mat_irrep_init(DBB, h);
1088
dpd_buf4_mat_irrep_rd(DBB, h);
1089
dpd_buf4_mat_irrep_init(DBA, h);
1090
dpd_buf4_mat_irrep_rd(DBA, h);
1096
dpd_file2_mat_init(FME);
1097
dpd_file2_mat_rd(FME);
1098
dpd_file2_mat_init(Fme);
1099
dpd_file2_mat_rd(Fme);
1101
for(h=0; h < nirreps; h++) {
1102
dpd_buf4_mat_irrep_init(WmNiE, h);
1103
dpd_buf4_mat_irrep_rd(WmNiE, h);
1105
dpd_buf4_mat_irrep_init(Wmnie, h);
1106
dpd_buf4_mat_irrep_rd(Wmnie, h);
1108
dpd_buf4_mat_irrep_init(WMnIe, h);
1109
dpd_buf4_mat_irrep_rd(WMnIe, h);
1111
for(h=0; h < nirreps; h++) {
1112
dpd_buf4_mat_irrep_init(Sijab, h);
1113
dpd_buf4_mat_irrep_rd(Sijab, h);
1116
/* put result here until end of function */
1117
S_irr = SIjAb->file.my_irrep;
1118
dpd_buf4_init(&SiJaB, CC_TMP0, S_irr, 23, 29, 23, 29, 0, "CC3 SiJaB");
1119
for(h=0; h < nirreps; h++) {
1120
dpd_buf4_mat_irrep_init(&SiJaB, h);
1124
dpd_file2_init(&fIJ, CC_OEI, 0, 0, 0, "fIJ");
1125
dpd_file2_init(&fAB, CC_OEI, 0, 1, 1, "fAB");
1126
dpd_file2_init(&fij, CC_OEI, 0, 2, 2, "fij");
1127
dpd_file2_init(&fab, CC_OEI, 0, 3, 3, "fab");
1129
/* target T3 amplitudes go in here */
1130
W1 = (double ***) malloc(nirreps * sizeof(double **));
1131
W2 = (double ***) malloc(nirreps * sizeof(double **));
1132
W3 = (double ***) malloc(nirreps * sizeof(double **));
1134
for(Gi=0; Gi < nirreps; Gi++) {
1135
for(Gj=0; Gj < nirreps; Gj++) {
1137
for(Gk=0; Gk < nirreps; Gk++) {
1138
Gijk = Gi ^ Gj ^ Gk;
1141
for(Gab=0; Gab < nirreps; Gab++) {
1142
Gc = Gab ^ Gijk ^ GX3;
1143
W1[Gab] = dpd_block_matrix(FBB->params->coltot[Gab], avirtpi[Gc]);
1145
for(Ga=0; Ga < nirreps; Ga++) {
1146
Gcb = Ga ^ Gijk ^ GX3;
1147
W2[Ga] = dpd_block_matrix(bvirtpi[Ga], WMaFe->params->coltot[Gcb]);
1149
for(Gb=0; Gb < nirreps; Gb++) {
1150
Gac = Gb ^ Gijk ^ GX3;
1151
W3[Gb] = dpd_block_matrix(bvirtpi[Gb], WmAfE->params->coltot[Gac]);
1154
for(i=0; i < boccpi[Gi]; i++) {
1155
I = bocc_off[Gi] + i;
1156
for(j=0; j < boccpi[Gj]; j++) {
1157
J = bocc_off[Gj] + j;
1158
for(k=0; k < aoccpi[Gk]; k++) {
1159
K = aocc_off[Gk] + k;
1161
T3_AAB(W1, nirreps, I, Gi, J, Gj, K, Gk, C2BB, C2BA, C2AB,
1162
FBB, FBA, FAB, EBB, EBA, EAB, &fij, &fIJ, &fab, &fAB,
1163
boccpi, bocc_off, aoccpi, aocc_off, bvirtpi, bvir_off, avirtpi, avir_off, omega);
1166
/* S_KC <-- 1/4 t_ijKabC <ij||ab> */
1171
ij = DBB->params->rowidx[I][J];
1173
nrows = DBB->params->coltot[Gij^GH];
1174
ncols = avirtpi[Gc];
1177
C_DGEMV('t', nrows, ncols, 0.25, W1[Gab][0], ncols, DBB->matrix[Gij][ij], 1,
1178
1.0, SIA->matrix[Gk][k], 1);
1180
/* S_ia <-- t_ijKabC <jK|bC> */
1185
jk = DBA->params->rowidx[J][K];
1187
for(Gab=0; Gab < nirreps; Gab++) {
1191
ab = W_offset[Gab][Ga];
1192
bc = DBA->col_offset[Gjk][Gb];
1194
nrows = bvirtpi[Ga];
1195
ncols = bvirtpi[Gb] * avirtpi[Gc];
1198
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][ab], ncols, &(DBA->matrix[Gjk][jk][bc]), 1,
1199
1.0, Sia->matrix[Gi][i], 1);
1201
} /* end do_singles */
1204
/* S_ijab <-- t_ijKabC F_KC */
1208
nrows = Sijab->params->coltot[Gij^GS];
1209
ncols = avirtpi[Gc];
1210
ij = Sijab->params->rowidx[I][J];
1213
C_DGEMV('n', nrows, ncols, 1.0, W1[Gab][0], ncols, FME->matrix[Gk][k], 1,
1214
1.0, Sijab->matrix[Gij][ij], 1);
1216
/* S_jKbC <-- t_ijKabC F_ia */
1220
jk = C2BA->params->rowidx[J][K];
1222
for(Gab=0; Gab < nirreps; Gab++) {
1226
ab = W_offset[Gab][Ga];
1227
bc = SiJaB.col_offset[Gjk][Gb];
1229
nrows = bvirtpi[Ga];
1230
ncols = bvirtpi[Gb] * avirtpi[Gc];
1233
C_DGEMV('t', nrows, ncols, 1.0, W1[Gab][ab], ncols, Fme->matrix[Gi][i], 1,
1234
1.0, &(SiJaB.matrix[Gjk][jk][bc]), 1);
1237
/* S_jida <-- t_ijKabC W_KdCb */
1238
/* sort W1(ab,C) to W2(a,Cb) */
1239
for(Gab=0; Gab < nirreps; Gab++) {
1240
Gc = Gab ^ Gijk ^ GX3;
1241
for(ab=0; ab < FBB->params->coltot[Gab]; ab++) {
1242
A = FBB->params->colorb[Gab][ab][0];
1243
B = FBB->params->colorb[Gab][ab][1];
1244
Ga = FBB->params->rsym[A];
1245
a = A - bvir_off[Ga];
1246
for(c=0; c < avirtpi[Gc]; c++) {
1247
C = avir_off[Gc] + c;
1248
cb = WMaFe->params->colidx[C][B];
1249
W2[Ga][a][cb] = W1[Gab][ab][c];
1254
ji = Sijab->params->rowidx[J][I];
1256
for(Gd=0; Gd < nirreps; Gd++) {
1261
kd = WMaFe->row_offset[Gkd][K];
1262
WMaFe->matrix[Gkd] = dpd_block_matrix(bvirtpi[Gd], WMaFe->params->coltot[Gkd^GH]);
1263
dpd_buf4_mat_irrep_rd_block(WMaFe, Gkd, kd, bvirtpi[Gd]);
1264
Z = block_matrix(bvirtpi[Ga], bvirtpi[Gd]);
1266
nrows = bvirtpi[Ga];
1267
ncols = bvirtpi[Gd];
1268
nlinks = WMaFe->params->coltot[Gkd^GH];
1270
if(nrows && ncols && nlinks)
1271
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W2[Ga][0], nlinks,
1272
WMaFe->matrix[Gkd][0], nlinks, 0.0, Z[0], ncols);
1274
for(a=0; a < bvirtpi[Ga]; a++) {
1275
A = bvir_off[Ga] + a;
1276
for(d=0; d < bvirtpi[Gd]; d++) {
1277
DD = bvir_off[Gd] + d;
1278
ad = Sijab->params->colidx[A][DD];
1279
da = Sijab->params->colidx[DD][A];
1280
Sijab->matrix[Gij][ji][ad] += -Z[a][d];
1281
Sijab->matrix[Gij][ji][da] += Z[a][d];
1285
dpd_free_block(WMaFe->matrix[Gkd], bvirtpi[Gd], WMaFe->params->coltot[Gkd^GH]);
1289
/* t_jKcD <-- 1/2 t_ijKabC W_idab */
1291
jk = SiJaB.params->rowidx[J][K];
1293
for(Gd=0; Gd < nirreps; Gd++) {
1296
Gc = Gab ^ Gijk ^ GX3;
1298
id = Wmafe->row_offset[Gid][I];
1299
Wmafe->matrix[Gid] = dpd_block_matrix(bvirtpi[Gd], Wmafe->params->coltot[Gid^GH]);
1300
dpd_buf4_mat_irrep_rd_block(Wmafe, Gid, id, bvirtpi[Gd]);
1301
Z = block_matrix(avirtpi[Gc], bvirtpi[Gd]);
1303
nrows = avirtpi[Gc];
1304
ncols = bvirtpi[Gd];
1305
nlinks = Wmafe->params->coltot[Gid^GH];
1307
if(nrows && ncols && nlinks)
1308
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W1[Gab][0], nrows,
1309
Wmafe->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
1311
for(c=0; c < avirtpi[Gc]; c++) {
1312
C = avir_off[Gc] + c;
1313
for(d=0; d < bvirtpi[Gd]; d++) {
1314
DD = bvir_off[Gd] + d;
1315
dc = SiJaB.params->colidx[DD][C];
1316
SiJaB.matrix[Gjk][jk][dc] += Z[c][d];
1321
dpd_free_block(Wmafe->matrix[Gid], bvirtpi[Gd], Wmafe->params->coltot[Gid^GH]);
1324
/* t_jKbD <-- t_ijKabC W_iDaC */
1325
/* sort W1(ab,C) to W3(b,aC) */
1326
for(Gab=0; Gab < nirreps; Gab++) {
1327
Gc = Gab ^ Gijk ^ GX3;
1328
for(ab=0; ab < FBB->params->coltot[Gab]; ab++) {
1329
A = FBB->params->colorb[Gab][ab][0];
1330
B = FBB->params->colorb[Gab][ab][1];
1331
Gb = FBB->params->ssym[B];
1332
b = B - bvir_off[Gb];
1333
for(c=0; c < avirtpi[Gc]; c++) {
1334
C = avir_off[Gc] + c;
1335
ac = WmAfE->params->colidx[A][C];
1336
W3[Gb][b][ac] = W1[Gab][ab][c];
1341
jk = SiJaB.params->rowidx[J][K];
1343
for(Gd=0; Gd < nirreps; Gd++) {
1346
Gb = Gac ^ Gijk ^ GX3;
1348
id = WmAfE->row_offset[Gid][I];
1349
WmAfE->matrix[Gid] = dpd_block_matrix(avirtpi[Gd], WmAfE->params->coltot[Gid^GH]);
1350
dpd_buf4_mat_irrep_rd_block(WmAfE, Gid, id, avirtpi[Gd]);
1351
Z = block_matrix(bvirtpi[Gb], avirtpi[Gd]);
1353
nrows = bvirtpi[Gb];
1354
ncols = avirtpi[Gd];
1355
nlinks = WmAfE->params->coltot[Gid^GH];
1357
if(nrows && ncols && nlinks)
1358
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W3[Gb][0], nlinks,
1359
WmAfE->matrix[Gid][0], nlinks, 0.0, Z[0], ncols);
1361
for(b=0; b < bvirtpi[Gb]; b++) {
1362
B = bvir_off[Gb] + b;
1363
for(d=0; d < avirtpi[Gd]; d++) {
1364
DD = avir_off[Gd] + d;
1365
bd = SiJaB.params->colidx[B][DD];
1366
SiJaB.matrix[Gjk][jk][bd] += Z[b][d];
1370
dpd_free_block(WmAfE->matrix[Gid], avirtpi[Gd], WmAfE->params->coltot[Gid^GH]);
1374
/* S_miab <--- +t_ijKabC W_jKmC */
1375
/* S_imab <--- -t_ijKabC W_jKmC */
1377
jk = WmNiE->params->rowidx[J][K];
1379
for(Gm=0; Gm < nirreps; Gm++) {
1382
Gc = Gab ^ Gijk ^ GX3;
1384
mc = WmNiE->col_offset[Gjk][Gm];
1386
nrows = Sijab->params->coltot[Gab];
1388
nlinks = avirtpi[Gc];
1390
Z = dpd_block_matrix(nrows, ncols);
1392
if(nrows && ncols && nlinks)
1393
C_DGEMM('n', 't', nrows, ncols, nlinks, 1.0, W1[Gab][0], nlinks,
1394
&(WmNiE->matrix[Gjk][jk][mc]), nlinks, 0.0, Z[0], ncols);
1396
for(m=0; m < ncols; m++) {
1397
M = bocc_off[Gm] + m;
1398
mi = Sijab->params->rowidx[M][I];
1399
im = Sijab->params->rowidx[I][M];
1400
for(ab=0; ab < nrows; ab++) {
1401
Sijab->matrix[Gmi][mi][ab] += Z[ab][m];
1402
Sijab->matrix[Gmi][im][ab] -= Z[ab][m];
1406
dpd_free_block(Z, nrows, ncols);
1409
/* t_mKbC <-- 1/2 t_ijKabC W_ijma */
1410
/* sort W(ab,C) to W(a,bC) */
1411
for(Gab=0; Gab < nirreps; Gab++) {
1412
Gc = Gab ^ Gijk ^ GX3;
1413
for(ab=0; ab < FBB->params->coltot[Gab]; ab++ ){
1414
A = FBB->params->colorb[Gab][ab][0];
1415
B = FBB->params->colorb[Gab][ab][1];
1416
Ga = FBB->params->rsym[A];
1417
a = A - bvir_off[Ga];
1418
for(c=0; c < avirtpi[Gc]; c++) {
1419
C = avir_off[Gc] + c;
1420
bc = SiJaB.params->colidx[B][C];
1421
W3[Ga][a][bc] = W1[Gab][ab][c];
1426
ij = Wmnie->params->rowidx[I][J];
1428
for(Gm=0; Gm < nirreps; Gm++) {
1431
Ga = Gbc ^ Gijk ^ GX3;
1433
ma = Wmnie->col_offset[Gij][Gm];
1435
nrows = SiJaB.params->coltot[Gmk^GS];
1437
nlinks = bvirtpi[Ga];
1439
Z = dpd_block_matrix(nrows, ncols);
1441
if(nrows && ncols && nlinks)
1442
C_DGEMM('t', 't', nrows, ncols, nlinks, 0.5, W3[Ga][0], nrows,
1443
&(Wmnie->matrix[Gij][ij][ma]), nlinks, 0.0, Z[0], ncols);
1445
for(m=0; m < boccpi[Gm]; m++) {
1446
M = bocc_off[Gm] + m;
1447
mk = SiJaB.params->rowidx[M][K];
1448
for(bc=0; bc < nrows; bc++) {
1449
SiJaB.matrix[Gmk][mk][bc] += Z[bc][m];
1453
dpd_free_block(Z, nrows, ncols);
1456
/* S_iMbC <-- t_ijKabC W_KjMa */
1457
/* sort W(ab,C) to W(a,bC) */
1458
for(Gab=0; Gab < nirreps; Gab++) {
1459
Gc = Gab ^ Gijk ^ GX3;
1460
for(ab=0; ab < FBB->params->coltot[Gab]; ab++ ){
1461
A = FBB->params->colorb[Gab][ab][0];
1462
B = FBB->params->colorb[Gab][ab][1];
1463
Ga = FBB->params->rsym[A];
1464
a = A - bvir_off[Ga];
1465
for(c=0; c < avirtpi[Gc]; c++) {
1466
C = avir_off[Gc] + c;
1467
bc = SiJaB.params->colidx[B][C];
1468
W3[Ga][a][bc] = W1[Gab][ab][c];
1473
kj = WMnIe->params->rowidx[K][J];
1475
for(Gm=0; Gm < nirreps; Gm++) {
1478
Ga = Gbc ^ Gijk ^ GX3;
1480
ma = WMnIe->col_offset[Gjk][Gm];
1482
nrows = SiJaB.params->coltot[Gim^GS];
1484
nlinks = bvirtpi[Ga];
1486
Z = dpd_block_matrix(nrows, ncols);
1488
if(nrows && ncols && nlinks)
1489
C_DGEMM('t', 't', nrows, ncols, nlinks, 1.0, W3[Ga][0], nrows,
1490
&(WMnIe->matrix[Gjk][kj][ma]), nlinks, 0.0, Z[0], ncols);
1492
for(m=0; m < aoccpi[Gm]; m++) {
1493
M = aocc_off[Gm] + m;
1494
im = SiJaB.params->rowidx[I][M];
1495
for(bc=0; bc < nrows; bc++) {
1496
SiJaB.matrix[Gim][im][bc] += Z[bc][m];
1500
dpd_free_block(Z, nrows, ncols);
1502
} /* end do_doubles */
1508
for(Gab=0; Gab < nirreps; Gab++) {
1509
Gc = Gab ^ Gijk ^ GX3;
1510
dpd_free_block(W1[Gab], FBB->params->coltot[Gab], avirtpi[Gc]);
1512
for(Ga=0; Ga < nirreps; Ga++) {
1513
Gcb = Ga ^ Gijk ^ GX3;
1514
dpd_free_block(W2[Ga], bvirtpi[Ga], WMaFe->params->coltot[Gcb]);
1516
for(Gb=0; Gb < nirreps; Gb++) {
1517
Gac = Gb ^ Gijk ^ GX3;
1518
dpd_free_block(W3[Gb], bvirtpi[Gb], WmAfE->params->coltot[Gac]);
1527
free_int_matrix(W_offset);
1529
dpd_file2_close(&fIJ);
1530
dpd_file2_close(&fAB);
1531
dpd_file2_close(&fij);
1532
dpd_file2_close(&fab);
1536
dpd_file2_mat_wrt(SIA);
1537
dpd_file2_mat_close(SIA);
1538
dpd_file2_mat_wrt(Sia);
1539
dpd_file2_mat_close(Sia);
1541
for(h=0; h < nirreps; h++) {
1542
dpd_buf4_mat_irrep_close(DBB, h);
1543
dpd_buf4_mat_irrep_close(DBA, h);
1549
dpd_file2_mat_close(FME);
1550
dpd_file2_mat_close(Fme);
1552
for(h=0; h < nirreps; h++) {
1553
dpd_buf4_mat_irrep_close(WmNiE, h);
1554
dpd_buf4_mat_irrep_close(Wmnie, h);
1555
dpd_buf4_mat_irrep_close(WMnIe, h);
1558
for(h=0; h < nirreps; h++) {
1559
dpd_buf4_mat_irrep_wrt(Sijab, h);
1560
dpd_buf4_mat_irrep_close(Sijab, h);
1562
for(h=0; h < nirreps; h++) {
1563
dpd_buf4_mat_irrep_wrt(&SiJaB, h);
1564
dpd_buf4_mat_irrep_close(&SiJaB, h);
1566
dpd_buf4_sort(&SiJaB, CC_TMP0, qpsr, 22, 28, "CC3 SIjAb");
1567
dpd_buf4_close(&SiJaB);
1568
dpd_buf4_init(&SiJaB, CC_TMP0, S_irr, 22, 28, 22, 28, 0, "CC3 SIjAb");
1569
dpd_buf4_axpy(&SiJaB, SIjAb, 1.0);
1570
dpd_buf4_close(&SiJaB);