2
#include <libdpd/dpd.h>
6
/* L2FL2(): Computes the contributions of the Fme HBAR matrix elements
7
** to the Lambda doubles equations. These contributions are given in
10
** L_ij^ab <-- P(ij) P(ab) L_i^a Fjb
12
** where Fjb = fjb + t_n^f <jn||bf>
21
int i,j,a,b,I,J,A,B,Isym,Jsym,Asym,Bsym;
22
dpdfile2 LIA, Lia, FJB, Fjb, L, F;
25
nirreps = moinfo.nirreps;
27
if(params.ref == 0) { /** RHF **/
29
dpd_file2_init(&L, CC_LAMBDA, L_irr, 0, 1, "LIA");
30
dpd_file2_mat_init(&L);
32
dpd_file2_init(&F, CC_OEI, 0, 0, 1, "FME");
33
dpd_file2_mat_init(&F);
36
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
38
for(h=0; h < nirreps; h++) {
40
dpd_buf4_mat_irrep_init(&newL2, h);
41
dpd_buf4_mat_irrep_rd(&newL2, h);
43
for(row=0; row < newL2.params->rowtot[h]; row++) {
44
i = newL2.params->roworb[h][row][0];
45
j = newL2.params->roworb[h][row][1];
47
for(col=0; col < newL2.params->coltot[h^L_irr]; col++) {
48
a = newL2.params->colorb[h^L_irr][col][0];
49
b = newL2.params->colorb[h^L_irr][col][1];
51
I = L.params->rowidx[i]; Isym = L.params->psym[i];
52
J = F.params->rowidx[j]; Jsym = F.params->psym[j];
53
A = L.params->colidx[a]; Asym = L.params->qsym[a];
54
B = F.params->colidx[b]; Bsym = F.params->qsym[b];
55
if(((Isym^Asym) == L_irr) && (Jsym == Bsym))
56
newL2.matrix[h][row][col] += (L.matrix[Isym][I][A] * F.matrix[Jsym][J][B]);
58
if((Isym == Asym) && ((Jsym^Bsym) == L_irr))
59
newL2.matrix[h][row][col] += (L.matrix[Jsym][J][B] * F.matrix[Isym][I][A]);
63
dpd_buf4_mat_irrep_wrt(&newL2, h);
64
dpd_buf4_mat_irrep_close(&newL2, h);
68
dpd_buf4_close(&newL2);
70
dpd_file2_mat_close(&F);
72
dpd_file2_mat_close(&L);
76
else if(params.ref == 1) { /** ROHF **/
78
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
79
dpd_file2_mat_init(&LIA);
80
dpd_file2_mat_rd(&LIA);
81
dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 0, 1, "Lia");
82
dpd_file2_mat_init(&Lia);
83
dpd_file2_mat_rd(&Lia);
84
dpd_file2_init(&FJB, CC_OEI, 0, 0, 1, "FME");
85
dpd_file2_mat_init(&FJB);
86
dpd_file2_mat_rd(&FJB);
87
dpd_file2_init(&Fjb, CC_OEI, 0, 0, 1, "Fme");
88
dpd_file2_mat_init(&Fjb);
89
dpd_file2_mat_rd(&Fjb);
91
else if(params.ref == 2) { /** UHF **/
93
dpd_file2_init(&LIA, CC_LAMBDA, L_irr, 0, 1, "LIA");
94
dpd_file2_mat_init(&LIA);
95
dpd_file2_mat_rd(&LIA);
96
dpd_file2_init(&Lia, CC_LAMBDA, L_irr, 2, 3, "Lia");
97
dpd_file2_mat_init(&Lia);
98
dpd_file2_mat_rd(&Lia);
99
dpd_file2_init(&FJB, CC_OEI, 0, 0, 1, "FME");
100
dpd_file2_mat_init(&FJB);
101
dpd_file2_mat_rd(&FJB);
102
dpd_file2_init(&Fjb, CC_OEI, 0, 2, 3, "Fme");
103
dpd_file2_mat_init(&Fjb);
104
dpd_file2_mat_rd(&Fjb);
108
if(params.ref == 1) /** RHF/ROHF **/
109
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB");
110
else if(params.ref == 2) /** UHF **/
111
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB");
113
if(params.ref == 1 || params.ref == 2) {
114
/* loop over row irreps of LIJAB */
115
for(h=0; h < nirreps; h++) {
117
dpd_buf4_mat_irrep_init(&newL2, h);
118
dpd_buf4_mat_irrep_rd(&newL2, h);
120
/* loop over rows of irrep of LIJAB */
121
for(row=0; row < newL2.params->rowtot[h]; row++) {
122
i = newL2.params->roworb[h][row][0];
123
j = newL2.params->roworb[h][row][1];
125
/* loop over cols of irrep of LIJAB */
126
for(col=0; col < newL2.params->coltot[h^L_irr]; col++) {
127
a = newL2.params->colorb[h^L_irr][col][0];
128
b = newL2.params->colorb[h^L_irr][col][1];
130
I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i];
131
J = FJB.params->rowidx[j]; Jsym = FJB.params->psym[j];
132
A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a];
133
B = FJB.params->colidx[b]; Bsym = FJB.params->qsym[b];
135
if( ((Isym^Asym) == L_irr) && (Jsym == Bsym) )
136
newL2.matrix[h][row][col] += (LIA.matrix[Isym][I][A] *
137
FJB.matrix[Jsym][J][B]);
139
J = LIA.params->rowidx[j]; Jsym = LIA.params->psym[j];
140
I = FJB.params->rowidx[i]; Isym = FJB.params->psym[i];
142
if( (Isym == Asym) && ((Jsym^Bsym) == L_irr) )
143
newL2.matrix[h][row][col] += (LIA.matrix[Jsym][J][B] *
144
FJB.matrix[Isym][I][A]);
146
I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i];
147
J = FJB.params->rowidx[j]; Jsym = FJB.params->psym[j];
148
B = LIA.params->colidx[b]; Bsym = LIA.params->qsym[b];
149
A = FJB.params->colidx[a]; Asym = FJB.params->qsym[a];
151
if( ((Jsym^Asym) == L_irr) && (Isym == Bsym))
152
newL2.matrix[h][row][col] -= (LIA.matrix[Jsym][J][A] *
153
FJB.matrix[Isym][I][B]);
155
J = LIA.params->rowidx[j]; Jsym = LIA.params->psym[j];
156
I = FJB.params->rowidx[i]; Isym = FJB.params->psym[i];
158
if( (Jsym == Asym) && ((Isym^Bsym) == L_irr) )
159
newL2.matrix[h][row][col] -= (LIA.matrix[Isym][I][B] *
160
FJB.matrix[Jsym][J][A]);
164
dpd_buf4_mat_irrep_wrt(&newL2, h);
165
dpd_buf4_mat_irrep_close(&newL2, h);
168
dpd_buf4_close(&newL2);
171
if(params.ref == 1) /** RHF/ROHF **/
172
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab");
173
else if(params.ref == 2) /** UHF **/
174
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab");
176
if(params.ref == 1 || params.ref == 2) {
177
for(h=0; h < nirreps; h++) {
179
dpd_buf4_mat_irrep_init(&newL2, h);
180
dpd_buf4_mat_irrep_rd(&newL2, h);
182
for(row=0; row < newL2.params->rowtot[h]; row++) {
183
i = newL2.params->roworb[h][row][0];
184
j = newL2.params->roworb[h][row][1];
186
for(col=0; col < newL2.params->coltot[h^L_irr]; col++) {
187
a = newL2.params->colorb[h^L_irr][col][0];
188
b = newL2.params->colorb[h^L_irr][col][1];
190
I = Lia.params->rowidx[i]; Isym = Lia.params->psym[i];
191
J = Fjb.params->rowidx[j]; Jsym = Fjb.params->psym[j];
192
A = Lia.params->colidx[a]; Asym = Lia.params->qsym[a];
193
B = Fjb.params->colidx[b]; Bsym = Fjb.params->qsym[b];
195
if(((Isym^Asym) == L_irr) && (Jsym == Bsym))
196
newL2.matrix[h][row][col] += (Lia.matrix[Isym][I][A] *
197
Fjb.matrix[Jsym][J][B]);
199
J = Lia.params->rowidx[j]; Jsym = Lia.params->psym[j];
200
I = Fjb.params->rowidx[i]; Isym = Fjb.params->psym[i];
202
if((Isym == Asym) && ((Jsym^Bsym) == L_irr))
203
newL2.matrix[h][row][col] += (Lia.matrix[Jsym][J][B] *
204
Fjb.matrix[Isym][I][A]);
206
I = Lia.params->rowidx[i]; Isym = Lia.params->psym[i];
207
J = Fjb.params->rowidx[j]; Jsym = Fjb.params->psym[j];
208
B = Lia.params->colidx[b]; Bsym = Lia.params->qsym[b];
209
A = Fjb.params->colidx[a]; Asym = Fjb.params->qsym[a];
211
if(((Jsym^Asym) == L_irr) && (Isym == Bsym))
212
newL2.matrix[h][row][col] -= (Lia.matrix[Jsym][J][A] *
213
Fjb.matrix[Isym][I][B]);
215
J = Lia.params->rowidx[j]; Jsym = Lia.params->psym[j];
216
I = Fjb.params->rowidx[i]; Isym = Fjb.params->psym[i];
218
if((Jsym == Asym) && ((Isym^Bsym) == L_irr))
219
newL2.matrix[h][row][col] -= (Lia.matrix[Isym][I][B] *
220
Fjb.matrix[Jsym][J][A]);
224
dpd_buf4_mat_irrep_wrt(&newL2, h);
225
dpd_buf4_mat_irrep_close(&newL2, h);
228
dpd_buf4_close(&newL2);
231
if(params.ref == 1) /** RHF/ROHF **/
232
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
233
else if(params.ref == 2) /** UHF **/
234
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb");
236
if(params.ref == 1 || params.ref == 2) {
237
for(h=0; h < nirreps; h++) {
239
dpd_buf4_mat_irrep_init(&newL2, h);
240
dpd_buf4_mat_irrep_rd(&newL2, h);
242
for(row=0; row < newL2.params->rowtot[h]; row++) {
243
i = newL2.params->roworb[h][row][0];
244
j = newL2.params->roworb[h][row][1];
246
for(col=0; col < newL2.params->coltot[h^L_irr]; col++) {
247
a = newL2.params->colorb[h^L_irr][col][0];
248
b = newL2.params->colorb[h^L_irr][col][1];
250
I = LIA.params->rowidx[i]; Isym = LIA.params->psym[i];
251
J = Fjb.params->rowidx[j]; Jsym = Fjb.params->psym[j];
252
A = LIA.params->colidx[a]; Asym = LIA.params->qsym[a];
253
B = Fjb.params->colidx[b]; Bsym = Fjb.params->qsym[b];
255
if(((Isym^Asym) == L_irr) && (Jsym == Bsym))
256
newL2.matrix[h][row][col] += (LIA.matrix[Isym][I][A] *
257
Fjb.matrix[Jsym][J][B]);
259
J = Lia.params->rowidx[j]; Jsym = Lia.params->psym[j];
260
I = FJB.params->rowidx[i]; Isym = FJB.params->psym[i];
261
B = Lia.params->colidx[b]; Bsym = Lia.params->qsym[b];
262
A = FJB.params->colidx[a]; Asym = FJB.params->qsym[a];
264
if((Isym == Asym) && ((Jsym^Bsym) == L_irr))
265
newL2.matrix[h][row][col] += (Lia.matrix[Jsym][J][B] *
266
FJB.matrix[Isym][I][A]);
270
dpd_buf4_mat_irrep_wrt(&newL2, h);
271
dpd_buf4_mat_irrep_close(&newL2, h);
276
if(params.ref == 1 || params.ref == 2) {
277
dpd_buf4_close(&newL2);
279
dpd_file2_mat_close(&FJB);
280
dpd_file2_close(&FJB);
281
dpd_file2_mat_close(&Fjb);
282
dpd_file2_close(&Fjb);
283
dpd_file2_mat_close(&LIA);
284
dpd_file2_close(&LIA);
285
dpd_file2_mat_close(&Lia);
286
dpd_file2_close(&Lia);