6
7
** using the expression given in lag.c.
10
void Iab(struct RHO_Params rho_params)
12
int a, b, c, A, B, C, Ga, Gb, Gc, Gac, Gbc;
13
int *vir_off, *virtpi, nirreps, length, col;
12
15
dpdbuf4 G, Bints, Cints, Dints, Eints, Fints;
16
vir_off = moinfo.vir_off;
17
virtpi = moinfo.virtpi;
18
nirreps = moinfo.nirreps;
14
20
if(params.ref == 0 || params.ref == 1) { /** RHF/ROHF **/
17
23
dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB");
19
25
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA");
20
dpd_file2_init(&D, CC_OEI, 0, 0, 1, "DAI");
26
dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl);
21
27
dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0);
22
28
dpd_file2_close(&D);
23
dpd_file2_init(&D, CC_OEI, 0, 0, 1, "DIA");
29
dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl);
24
30
dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0);
25
31
dpd_file2_close(&D);
26
32
dpd_file2_close(&F);
28
34
dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB");
29
dpd_file2_init(&D, CC_OEI, 0, 1, 1, "DAB");
35
dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl);
30
36
dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0);
31
37
dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0);
32
38
dpd_file2_close(&D);
38
44
dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'ab");
40
46
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fia");
41
dpd_file2_init(&D, CC_OEI, 0, 0, 1, "Dai");
47
dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl);
42
48
dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0);
43
49
dpd_file2_close(&D);
44
dpd_file2_init(&D, CC_OEI, 0, 0, 1, "Dia");
50
dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl);
45
51
dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0);
46
52
dpd_file2_close(&D);
47
53
dpd_file2_close(&F);
49
55
dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fab");
50
dpd_file2_init(&D, CC_OEI, 0, 1, 1, "Dab");
56
dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl);
51
57
dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0);
52
58
dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0);
53
59
dpd_file2_close(&D);
61
67
dpd_file2_init(&I, CC_OEI, 0, 1, 1, "I'AB");
63
69
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "fIA");
64
dpd_file2_init(&D, CC_OEI, 0, 0, 1, "DAI");
70
dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl);
65
71
dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0);
66
72
dpd_file2_close(&D);
67
dpd_file2_init(&D, CC_OEI, 0, 0, 1, "DIA");
73
dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl);
68
74
dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0);
69
75
dpd_file2_close(&D);
70
76
dpd_file2_close(&F);
72
78
dpd_file2_init(&F, CC_OEI, 0, 1, 1, "fAB");
73
dpd_file2_init(&D, CC_OEI, 0, 1, 1, "DAB");
79
dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl);
74
80
dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0);
75
81
dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0);
76
82
dpd_file2_close(&D);
82
88
dpd_file2_init(&I, CC_OEI, 0, 3, 3, "I'ab");
84
90
dpd_file2_init(&F, CC_OEI, 0, 2, 3, "fia");
85
dpd_file2_init(&D, CC_OEI, 0, 2, 3, "Dai");
91
dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dai_lbl);
86
92
dpd_contract222(&F, &D, &I, 1, 1, 1.0, 0.0);
87
93
dpd_file2_close(&D);
88
dpd_file2_init(&D, CC_OEI, 0, 2, 3, "Dia");
94
dpd_file2_init(&D, CC_OEI, 0, 2, 3, rho_params.Dia_lbl);
89
95
dpd_contract222(&F, &D, &I, 1, 1, 1.0, 1.0);
90
96
dpd_file2_close(&D);
91
97
dpd_file2_close(&F);
93
99
dpd_file2_init(&F, CC_OEI, 0, 3, 3, "fab");
94
dpd_file2_init(&D, CC_OEI, 0, 3, 3, "Dab");
100
dpd_file2_init(&D, CC_OEI, 0, 3, 3, rho_params.Dab_lbl);
95
101
dpd_contract222(&F, &D, &I, 0, 0, 1.0, 1.0);
96
102
dpd_contract222(&F, &D, &I, 0, 1, 1.0, 1.0);
97
103
dpd_file2_close(&D);
193
199
dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>");
194
200
dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd");
195
dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0);
201
/* dpd_contract442(&Bints, &G, &I, 0, 0, 2.0, 1.0); replaced with 2(V**3) memory code*/
202
dpd_file2_mat_init(&I);
203
dpd_file2_mat_rd(&I);
204
for(Gac=0; Gac < nirreps; Gac++) {
206
for(Ga=0; Ga < nirreps; Ga++) {
209
Bints.matrix[Gac] = dpd_block_matrix(virtpi[Gc], Bints.params->coltot[Gac]);
210
G.matrix[Gbc] = dpd_block_matrix(virtpi[Gc], G.params->coltot[Gbc]);
211
for(a=0; a < virtpi[Ga]; a++) {
213
for(b=0; b < virtpi[Gb]; b++) {
215
dpd_buf4_mat_irrep_rd_block(&Bints, Gac, Bints.row_offset[Gac][A], virtpi[Gc]);
216
dpd_buf4_mat_irrep_rd_block(&G, Gbc, G.row_offset[Gbc][B], virtpi[Gc]);
217
length = virtpi[Gc] * Bints.params->coltot[Gac];
219
I.matrix[Ga][a][b] += 2.0 * C_DDOT(length, Bints.matrix[Gac][0], 1, G.matrix[Gbc][0], 1);
222
dpd_free_block(Bints.matrix[Gac], virtpi[Gc], Bints.params->coltot[Gac]);
223
dpd_free_block(G.matrix[Gbc], virtpi[Gc], G.params->coltot[Gbc]);
226
dpd_file2_mat_wrt(&I);
227
dpd_file2_mat_close(&I);
196
228
dpd_buf4_close(&G);
197
229
dpd_buf4_close(&Bints);
210
242
dpd_buf4_init(&Bints, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>");
211
243
dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd");
212
dpd_contract442(&Bints, &G, &I, 3, 3, 2.0, 1.0);
244
/* dpd_contract442(&Bints, &G, &I, 3, 3, 2.0, 1.0); replaced with 2(V**3) memory code*/
245
dpd_file2_mat_init(&I);
246
dpd_file2_mat_rd(&I);
247
for(Gac=0; Gac < nirreps; Gac++) {
249
for(Gc=0; Gc < nirreps; Gc++) {
252
Bints.matrix[Gac] = dpd_block_matrix(virtpi[Ga], Bints.params->coltot[Gac]);
253
G.matrix[Gbc] = dpd_block_matrix(virtpi[Gb], G.params->coltot[Gbc]);
254
for(c=0; c < virtpi[Gc]; c++) {
256
dpd_buf4_mat_irrep_rd_block(&Bints, Gac, Bints.row_offset[Gac][C], virtpi[Ga]);
257
dpd_buf4_mat_irrep_rd_block(&G, Gbc, G.row_offset[Gbc][C], virtpi[Gb]);
258
for(a=0; a < virtpi[Ga]; a++) {
259
for(b=0; b < virtpi[Gb]; b++) {
260
for (col=0; col< Bints.params->coltot[Gac]; ++col)
261
I.matrix[Ga][a][b] += 2.0 * Bints.matrix[Gac][a][col]*G.matrix[Gbc][b][col] ;
265
dpd_free_block(Bints.matrix[Gac], virtpi[Ga], Bints.params->coltot[Gac]);
266
dpd_free_block(G.matrix[Gbc], virtpi[Gb], G.params->coltot[Gbc]);
269
dpd_file2_mat_wrt(&I);
270
dpd_file2_mat_close(&I);
213
271
dpd_buf4_close(&G);
214
272
dpd_buf4_close(&Bints);