3
\brief Enter brief description of file here
7
#include <libdpd/dpd.h>
14
namespace psi { namespace cis {
16
void Z_build(int irrep, int root, enum Spin spin)
20
dpdbuf4 X, X1, X2, Z, F, E;
22
if(params.ref == 0) { /** RHF **/
25
sprintf(lbl, "BIA(%d)[%d] singlet", root, irrep);
27
sprintf(lbl, "BIA(%d)[%d] triplet", root, irrep);
29
dpd_file2_init(&B, CC_OEI, irrep, 0, 1, lbl);
31
sprintf(lbl, "ZIjAb[%d]", irrep);
32
dpd_buf4_init(&Z, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl);
33
dpd_buf4_scm(&Z, 0.0);
35
/* X(Ij,Ab) <-- b(I,C) <Cj|Ab> */
36
sprintf(lbl, "XbAjI[%d]", irrep);
37
dpd_buf4_init(&X, CC_TMP0, irrep, 5, 0, 5, 0, 0, lbl);
38
dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>");
39
dpd_contract424(&F, &B, &X, 1, 1, 0, 1, 0);
41
sprintf(lbl, "XjIbA[%d]", irrep);
42
dpd_buf4_sort(&X, CC_TMP0, rspq, 0, 5, lbl);
44
sprintf(lbl, "XjIbA[%d]", irrep);
45
dpd_buf4_init(&X, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl);
46
if(spin == singlet) dpd_buf4_axpy(&X, &Z, 1);
47
else dpd_buf4_axpy(&X, &Z, -1);
48
sprintf(lbl, "XIjAb[%d]", irrep);
49
dpd_buf4_sort(&X, CC_TMP0, qpsr, 0, 5, lbl);
51
sprintf(lbl, "XIjAb[%d]", irrep);
52
dpd_buf4_init(&X, CC_TMP0, irrep, 0, 5, 0, 5, 0, lbl);
53
dpd_buf4_axpy(&X, &Z, 1);
56
/* X(Ij,Ab) <-- -<Ij|Ak> B(k,b) */
57
sprintf(lbl, "XIjAb[%d]", irrep);
58
dpd_buf4_init(&X, CC_TMP1, irrep, 0, 5, 0, 5, 0, lbl);
59
dpd_buf4_init(&E, CC_EINTS, 0, 11, 0, 11, 0, 0, "E <ai|jk>");
60
dpd_contract424(&E, &B, &X, 1, 0, 0, -1, 0);
62
sprintf(lbl, "XjIbA[%d]", irrep);
63
dpd_buf4_sort(&X, CC_TMP1, qpsr, 0, 5, lbl);
65
dpd_buf4_axpy(&X, &Z, 1);
67
sprintf(lbl, "XjIbA[%d]", irrep);
68
dpd_buf4_init(&X, CC_TMP1, irrep, 0, 5, 0, 5, 0, lbl);
69
if(spin == singlet) dpd_buf4_axpy(&X, &Z, 1);
70
else dpd_buf4_axpy(&X, &Z, -1);
75
sprintf(lbl, "ZIjbA[%d]", irrep);
76
dpd_buf4_sort(&Z, CC_TMP1, pqsr, 0, 5, lbl);
77
sprintf(lbl, "(ZIjAb - 1/2 ZIjbA)[%d]", irrep);
78
dpd_buf4_copy(&Z, CC_MISC, lbl);
80
sprintf(lbl, "(ZIjAb - 1/2 ZIjbA)[%d]", irrep);
81
dpd_buf4_init(&Z, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl);
82
sprintf(lbl, "ZIjbA[%d]", irrep);
83
dpd_buf4_init(&X, CC_TMP1, irrep, 0, 5, 0, 5, 0, lbl);
84
dpd_buf4_axpy(&X, &Z, -0.5);
88
sprintf(lbl, "ZIjbA[%d]", irrep);
89
dpd_buf4_sort(&Z, CC_TMP1, pqsr, 0, 5, lbl);
90
sprintf(lbl, "(ZIjAb + 1/2 ZIjbA)[%d]", irrep);
91
dpd_buf4_copy(&Z, CC_MISC, lbl);
93
sprintf(lbl, "(ZIjAb + 1/2 ZIjbA)[%d]", irrep);
94
dpd_buf4_init(&Z, CC_MISC, irrep, 0, 5, 0, 5, 0, lbl);
95
sprintf(lbl, "ZIjbA[%d]", irrep);
96
dpd_buf4_init(&X, CC_TMP1, irrep, 0, 5, 0, 5, 0, lbl);
97
dpd_buf4_axpy(&X, &Z, 0.5);
105
else if(params.ref == 2) { /** UHF **/
107
sprintf(lbl, "BIA(%d)[%d]", root, irrep);
108
dpd_file2_init(&B_A, CC_OEI, irrep, 0, 1, lbl);
109
sprintf(lbl, "Bia(%d)[%d]", root, irrep);
110
dpd_file2_init(&B_B, CC_OEI, irrep, 2, 3, lbl);
112
/* X(IJ,AB) <-- b(I,C) <CJ||AB> */
113
sprintf(lbl, "XIJAB[%d]", irrep);
114
dpd_buf4_init(&X, CC_TMP0, irrep, 0, 7, 0, 7, 0, lbl);
115
dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>");
116
dpd_contract244(&B_A, &F, &X, 1, 0, 0, 1, 0);
118
sprintf(lbl, "XJIAB[%d]", irrep);
119
dpd_buf4_sort(&X, CC_TMP0, qprs, 0, 7, lbl);
122
sprintf(lbl, "XIJAB[%d]", irrep);
123
dpd_buf4_init(&X1, CC_TMP0, irrep, 0, 7, 0, 7, 0, lbl);
124
sprintf(lbl, "XJIAB[%d]", irrep);
125
dpd_buf4_init(&X2, CC_TMP0, irrep, 0, 7, 0, 7, 0, lbl);
126
dpd_buf4_axpy(&X2, &X1, -1);
128
sprintf(lbl, "ZIJAB[%d]", irrep);
129
dpd_buf4_init(&Z, CC_MISC, irrep, 0, 7, 2, 7, 0, lbl);
130
dpd_buf4_scm(&Z, 0.0);
131
dpd_buf4_axpy(&X1, &Z, 1);
135
/* X(IJ,AB) <-- -<IJ||AK> B(K,B) */
136
sprintf(lbl, "XIJAB[%d]", irrep);
137
dpd_buf4_init(&X, CC_TMP1, irrep, 2, 5, 2, 5, 0, lbl);
138
dpd_buf4_init(&E, CC_EINTS, 0, 2, 21, 2, 21, 0, "E <IJ||KA> (I>J,AK)");
139
dpd_contract424(&E, &B_A, &X, 3, 0, 0, 1, 0);
141
sprintf(lbl, "XIJBA[%d]", irrep);
142
dpd_buf4_sort(&X, CC_TMP1, pqsr, 2, 5, lbl);
145
sprintf(lbl, "XIJAB[%d]", irrep);
146
dpd_buf4_init(&X1, CC_TMP1, irrep, 2, 5, 2, 5, 0, lbl);
147
sprintf(lbl, "XIJBA[%d]", irrep);
148
dpd_buf4_init(&X2, CC_TMP1, irrep, 2, 5, 2, 5, 0, lbl);
149
dpd_buf4_axpy(&X2, &X1, -1);
151
sprintf(lbl, "ZIJAB[%d]", irrep);
152
dpd_buf4_init(&Z, CC_MISC, irrep, 2, 5, 2, 7, 0, lbl);
153
dpd_buf4_axpy(&X1, &Z, 1);
157
/* X(ij,ab) <-- b(i,c) <cj||ab> */
158
sprintf(lbl, "Xijab[%d]", irrep);
159
dpd_buf4_init(&X, CC_TMP0, irrep, 10, 17, 10, 17, 0, lbl);
160
dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>");
161
dpd_contract244(&B_B, &F, &X, 1, 0, 0, 1, 0);
163
sprintf(lbl, "Xjiab[%d]", irrep);
164
dpd_buf4_sort(&X, CC_TMP0, qprs, 10, 17, lbl);
167
sprintf(lbl, "Xijab[%d]", irrep);
168
dpd_buf4_init(&X1, CC_TMP0, irrep, 10, 17, 10, 17, 0, lbl);
169
sprintf(lbl, "Xjiab[%d]", irrep);
170
dpd_buf4_init(&X2, CC_TMP0, irrep, 10, 17, 10, 17, 0, lbl);
171
dpd_buf4_axpy(&X2, &X1, -1);
173
sprintf(lbl, "Zijab[%d]", irrep);
174
dpd_buf4_init(&Z, CC_MISC, irrep, 10, 17, 12, 17, 0, lbl);
175
dpd_buf4_scm(&Z, 0.0);
176
dpd_buf4_axpy(&X1, &Z, 1);
180
/* X(ij,ab) <-- -<ij||ak> B(k,b) */
181
sprintf(lbl, "Xijab[%d]", irrep);
182
dpd_buf4_init(&X, CC_TMP1, irrep, 12, 15, 12, 15, 0, lbl);
183
dpd_buf4_init(&E, CC_EINTS, 0, 12, 31, 12, 31, 0, "E <ij||ka> (i>j,ak)");
184
dpd_contract424(&E, &B_B, &X, 3, 0, 0, 1, 0);
186
sprintf(lbl, "Xijba[%d]", irrep);
187
dpd_buf4_sort(&X, CC_TMP1, pqsr, 12, 15, lbl);
190
sprintf(lbl, "Xijab[%d]", irrep);
191
dpd_buf4_init(&X1, CC_TMP1, irrep, 12, 15, 12, 15, 0, lbl);
192
sprintf(lbl, "Xijba[%d]", irrep);
193
dpd_buf4_init(&X2, CC_TMP1, irrep, 12, 15, 12, 15, 0, lbl);
194
dpd_buf4_axpy(&X2, &X1, -1);
196
sprintf(lbl, "Zijab[%d]", irrep);
197
dpd_buf4_init(&Z, CC_MISC, irrep, 12, 15, 12, 17, 0, lbl);
198
dpd_buf4_axpy(&X1, &Z, 1);
202
/* Z(Ij,Ab) <-- b(I,C) <Cj|Ab> */
203
sprintf(lbl, "ZIjAb[%d]", irrep);
204
dpd_buf4_init(&Z, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl);
205
dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>");
206
dpd_contract244(&B_A, &F, &Z, 1, 0, 0, 1, 0);
210
/* X(jI,bA) <-- - b(j,c) <cI|bA> */
211
sprintf(lbl, "XIjAb[%d]", irrep);
212
dpd_buf4_init(&X, CC_TMP0, irrep, 23, 29, 23, 29, 0, lbl);
213
dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>");
214
dpd_contract244(&B_B, &F, &X, 1, 0, 0, 1, 0);
216
/* X(jI,bA) --> Z(Ij,Ab) */
217
sprintf(lbl, "ZIjAb[%d]", irrep);
218
dpd_buf4_sort_axpy(&X, CC_MISC, qpsr, 22, 28, lbl, 1);
221
/* Z(Ij,Ab) <-- -<Ij|Ak> b(k,b) */
222
sprintf(lbl, "ZIjAb[%d]", irrep);
223
dpd_buf4_init(&Z, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl);
224
dpd_buf4_init(&E, CC_EINTS, 0, 22, 26, 22, 26, 0, "E <Ij|Ak>");
225
dpd_contract424(&E, &B_B, &Z, 3, 0, 0, -1, 1);
229
/* Z(Ij,Ab) <-- - b(K,A) <Kb|Ij> */
230
sprintf(lbl, "ZIjAb[%d]", irrep);
231
dpd_buf4_init(&Z, CC_MISC, irrep, 22, 28, 22, 28, 0, lbl);
232
dpd_buf4_init(&E, CC_EINTS, 0, 24, 22, 24, 22, 0, "E <Ia|Jk>");
233
dpd_contract244(&B_A, &E, &Z, 0, 0, 1, -1, 1);
237
dpd_file2_close(&B_A);
238
dpd_file2_close(&B_B);
243
}} // namespace psi::cis