30
30
void Wmbej_build(void) {
31
31
dpdbuf4 WMBEJ, Wmbej, WMbEj, WmBeJ, WmBEj, WMbeJ;
32
32
dpdbuf4 tIAJB, tjAIb, tiajb, tIAjb, tiaJB, tIbjA;
33
dpdbuf4 D, C, F, E, X, Y, t2, W;
33
dpdbuf4 D, C, F, E, X, Y, t2, W, Z;
36
if(params.ref == 0 || params.ref == 1) { /** RHF or ROHF **/
35
int Gmb, mb, Gj, Ge, Gf, nrows, ncols, nlinks;
37
if(params.ref == 0) { /** RHF **/
39
/* <mb||ej> -> Wmbej */
41
dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>");
42
dpd_buf4_scmcopy(&C, CC_TMP0, "WMbeJ", -1);
45
dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)");
46
dpd_buf4_copy(&D, CC_TMP0, "WMbEj");
49
dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
53
dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>");
55
dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj");
56
dpd_contract424(&F, &tIA, &WMbEj, 3, 1, 0, 1, 1); /* should run OOC, if needed */
57
dpd_buf4_close(&WMbEj);
62
dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>");
64
dpd_buf4_init(&Z, CC_TMP0, 0, 11, 11, 11, 11, 0, "Z(bM,eJ)");
65
dpd_contract424(&F, &tIA, &Z, 3, 1, 0, -1, 0);
66
dpd_buf4_sort(&Z, CC_TMP0, qpsr, 10, 10, "Z(Mb,Je)");
68
dpd_buf4_init(&Z, CC_TMP0, 0, 10, 10, 10, 10, 0, "Z(Mb,Je)");
69
dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ");
70
dpd_buf4_axpy(&Z, &WMbeJ, 1.0);
71
dpd_buf4_close(&WMbeJ);
76
/* W(Mb,Je) <-- t(J,F) <Mb|Fe> */
77
/* OOC code added to replace above on 3/26/05, TDC */
78
dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>");
79
dpd_buf4_init(&W, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ");
80
dpd_file2_mat_init(&tIA);
81
dpd_file2_mat_rd(&tIA);
83
for(Gmb=0; Gmb < moinfo.nirreps; Gmb++) {
84
dpd_buf4_mat_irrep_row_init(&W, Gmb);
85
dpd_buf4_mat_irrep_row_init(&F, Gmb);
87
for(mb=0; mb < F.params->rowtot[Gmb]; mb++) {
88
dpd_buf4_mat_irrep_row_rd(&W, Gmb, mb);
89
dpd_buf4_mat_irrep_row_rd(&F, Gmb, mb);
91
for(Gj=0; Gj < moinfo.nirreps; Gj++) {
92
Gf = Gj; /* T1 is totally symmetric */
93
Ge = Gmb ^ Gf; /* <mb|fe> is totally symmetric */
95
nrows = moinfo.occpi[Gj];
96
ncols = moinfo.virtpi[Ge];
97
nlinks = moinfo.virtpi[Gf];
98
if(nrows && ncols && nlinks)
99
C_DGEMM('n','n',nrows,ncols,nlinks,-1.0,tIA.matrix[Gj][0],nlinks,
100
&F.matrix[Gmb][0][F.col_offset[Gmb][Gf]],ncols,1.0,
101
&W.matrix[Gmb][0][W.col_offset[Gmb][Gj]],ncols);
104
dpd_buf4_mat_irrep_row_wrt(&W, Gmb, mb);
107
dpd_buf4_mat_irrep_row_close(&F, Gmb);
108
dpd_buf4_mat_irrep_row_close(&W, Gmb);
111
dpd_file2_mat_close(&tIA);
116
dpd_file2_close(&tIA);
119
dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
121
dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>");
122
dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj");
123
dpd_contract424(&E, &tIA, &WMbEj, 3, 0, 1, -1, 1);
124
dpd_buf4_close(&WMbEj);
127
dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>");
128
dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ");
129
dpd_contract424(&E, &tIA, &WMbeJ, 1, 0, 1, 1, 1);
130
dpd_buf4_close(&WMbeJ);
133
dpd_file2_close(&tIA);
136
/* Sort to (ME,JB) */
138
dpd_buf4_init(&WMbEj, CC_TMP0, 0, 10, 11, 10, 11, 0, "WMbEj");
139
dpd_buf4_sort(&WMbEj, CC_HBAR, prsq, 10, 10, "WMbEj");
140
dpd_buf4_close(&WMbEj);
142
dpd_buf4_init(&WMbeJ, CC_TMP0, 0, 10, 10, 10, 10, 0, "WMbeJ");
143
dpd_buf4_sort(&WMbeJ, CC_HBAR, psrq, 10, 10, "WMbeJ");
144
dpd_buf4_close(&WMbeJ);
149
dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
153
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj");
154
dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIAjb");
155
dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D 2<ij|ab> - <ij|ba> (ia,jb)");
156
dpd_contract444(&D, &t2, &W, 0, 0, 1, 1);
159
dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tjAIb");
160
dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ia,jb)");
161
dpd_contract444(&D, &t2, &W, 0, 0, -1, 1);
166
dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)");
167
dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ia,bj)");
168
dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0);
170
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj");
171
dpd_contract424(&Y, &tIA, &W, 3, 0, 0, -1, 1);
177
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ");
178
dpd_buf4_init(&t2, CC_TAMPS, 0, 10, 10, 10, 10, 0, "tIbjA");
179
dpd_buf4_init(&D, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)");
180
dpd_contract444(&D, &t2, &W, 0, 0, 1, 1);
185
dpd_buf4_init(&Y, CC_TMP0, 0, 10, 0, 10, 0, 0, "Y (ME,JN)");
186
dpd_buf4_init(&D, CC_DINTS, 0, 10, 11, 10, 11, 0, "D <ij|ab> (ib,aj)");
187
dpd_contract244(&tIA, &D, &Y, 1, 2, 1, 1, 0);
189
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ");
190
dpd_contract424(&Y, &tIA, &W, 3, 0, 0, 1, 1);
194
dpd_file2_close(&tIA);
197
else if(params.ref == 1) { /** ROHF **/
38
199
/* W(mb,je) <-- <mb||ej> */