2
#include <libdpd/dpd.h>
6
/* WmbejL2(): Computes the contributions of the Wmbej HBAR matrix
7
** elements to the Lambda double deexcitation amplitude equations.
8
** These contributions are written in spin orbitals as:
10
** L_ij^ab <-- P(ij) P(ab) L_im^ae Wjebm =
11
** L_im^ae Wjebm - L_jm^ae Wiebm - L_im^be Wjeam + L_jm^be Wieam
13
** The matrix elements for all six spin cases are stored in (me,jb)
14
** ordering. This leads to the following contractions for the three
17
** L(IA,JB) <-- L(IA,ME) W(JB,ME) + L(IA,me) W(JB,me)
18
** - L(JA,ME) W(IB,ME) - L(JA,me) W(IB,me)
19
** - L(IB,ME) W(JA,ME) - L(IB,me) W(JA,me)
20
** + L(JB,ME) W(IA,ME) + L(JB,me) W(IA,me)
21
** (only two unique contractions)
22
** L(ia,jb) <-- L(ia,me) W(jb,me) + L(ia,ME) W(jb,ME)
23
** - L(ja,me) W(ib,me) - L(ja,ME) W(ib,ME)
24
** - L(ib,me) W(ja,me) - L(ib,ME) W(ja,ME)
25
** + L(jb,me) W(ia,me) + L(jb,ME) W(ia,ME)
26
** (only two unique contractions)
27
** L(IA,jb) <-- L(IA,ME) W(jb,ME) + L(IA,me) W(jb,me)
28
** - L(jA,Me) W(Ib,Me)
29
** - L(Ib,Me) W(jA,Me)
30
** + L(jb,ME) W(IA,ME) + L(jb,me) W(IA,me)
31
** (all six contractions are unique for ROHF and UHF orbitals)
35
** For RHF contractions, we evaluate the contractions as follows:
37
** + L(jb,ME) W(IA,ME) + L(jb,me) W(IA,me) I
38
** + L(jA,Me) W(Ib,Me) + L(Ib,mE) W(jA,mE) II + III
39
** + L(IA,ME) W(jb,ME) + L(IA,me) W(jb,me) IV
41
** Similar to what we did in ccenergy/WmbejT2.c, the AB L2 terms labelled I and IV
42
** above may be written as (apart from index swapping):
44
** 1/2 [2 L(jb,ME) - L(jB,Me)] [2 W(me,IA) + W(Me,Ia)] + 1/2 L(jB,Me) W(Me,Ia)
46
** Terms II and III are exactly the same as the last term above, apart from the
47
** factor of 1/2 and index swapping. So, for RHF orbitals, we need to evaluate two
54
void WmbejL2(int L_irr)
56
dpdbuf4 newL2, L2, W, Z, Z2;
58
/* RHS += P(ij)P(ab)Limae * Wjebm */
59
if(params.ref == 0) { /** RHF **/
61
dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(Ib,jA)");
62
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ");
63
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIbjA");
64
dpd_contract444(&W, &L2, &Z, 0, 1, 1, 0);
67
dpd_buf4_sort(&Z, CC_TMP0, psrq, 10, 10, "Z(IA,jb) III");
70
dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(IA,jb) I");
72
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "2 W(ME,jb) + W(Me,Jb)");
73
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "2 LIAjb - LIbjA");
74
dpd_contract444(&W, &L2, &Z, 0, 1, 0.5, 0);
78
dpd_buf4_init(&Z2, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(Ib,jA)");
79
dpd_buf4_axpy(&Z2, &Z, 0.5);
82
dpd_buf4_init(&Z2, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(IA,jb) III");
83
dpd_buf4_axpy(&Z2, &Z, 1);
86
dpd_buf4_sort_axpy(&Z, CC_LAMBDA, prqs, 0, 5, "New LIjAb", 1);
87
dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rpsq, 0, 5, "New LIjAb", 1);
91
else if(params.ref == 1) { /** ROHF **/
93
dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(IA,JB)");
94
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAJB");
95
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ");
96
dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 0.0);
99
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAjb");
100
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj");
101
dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 1.0);
104
dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 10, "Z(JA,IB)");
105
dpd_buf4_sort(&Z, CC_TMP2, psrq, 10, 10, "Z(IB,JA)");
106
dpd_buf4_sort(&Z, CC_TMP3, rspq, 10, 10, "Z(JB,IA)");
107
dpd_buf4_init(&Z2, CC_TMP1, L_irr, 10, 10, 10, 10, 0, "Z(JA,IB)");
108
dpd_buf4_axpy(&Z2, &Z, -1.0);
110
dpd_buf4_init(&Z2, CC_TMP2, L_irr, 10, 10, 10, 10, 0, "Z(IB,JA)");
111
dpd_buf4_axpy(&Z2, &Z, -1.0);
113
dpd_buf4_init(&Z2, CC_TMP3, L_irr, 10, 10, 10, 10, 0, "Z(JB,IA)");
114
dpd_buf4_axpy(&Z2, &Z, 1.0);
116
dpd_buf4_sort(&Z, CC_TMP1, prqs, 0, 5, "Z(IJ,AB)");
118
dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(IJ,AB)");
119
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "New LIJAB");
120
dpd_buf4_axpy(&Z, &newL2, 1.0);
122
dpd_buf4_close(&newL2);
124
dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(ia,jb)");
125
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "Liajb");
126
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej");
127
dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 0.0);
130
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LiaJB");
131
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ");
132
dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 1.0);
135
dpd_buf4_sort(&Z, CC_TMP1, rqps, 10, 10, "Z(ja,ib)");
136
dpd_buf4_sort(&Z, CC_TMP2, psrq, 10, 10, "Z(ib,ja)");
137
dpd_buf4_sort(&Z, CC_TMP3, rspq, 10, 10, "Z(jb,ia)");
138
dpd_buf4_init(&Z2, CC_TMP1, L_irr, 10, 10, 10, 10, 0, "Z(ja,ib)");
139
dpd_buf4_axpy(&Z2, &Z, -1.0);
141
dpd_buf4_init(&Z2, CC_TMP2, L_irr, 10, 10, 10, 10, 0, "Z(ib,ja)");
142
dpd_buf4_axpy(&Z2, &Z, -1.0);
144
dpd_buf4_init(&Z2, CC_TMP3, L_irr, 10, 10, 10, 10, 0, "Z(jb,ia)");
145
dpd_buf4_axpy(&Z2, &Z, 1.0);
147
dpd_buf4_sort(&Z, CC_TMP1, prqs, 0, 5, "Z(ij,ab)");
149
dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(ij,ab)");
150
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "New Lijab");
151
dpd_buf4_axpy(&Z, &newL2, 1.0);
153
dpd_buf4_close(&newL2);
156
dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(IA,jb)");
157
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAJB");
158
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBeJ");
159
dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 0.0);
162
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIAjb");
163
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "Wmbej");
164
dpd_contract444(&L2, &W, &Z, 0, 0, 1.0, 1.0);
167
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "Liajb");
168
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbEj");
169
dpd_contract444(&W, &L2, &Z, 0, 0, 1.0, 1.0);
172
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LiaJB");
173
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMBEJ");
174
dpd_contract444(&W, &L2, &Z, 0, 0, 1.0, 1.0);
177
dpd_buf4_sort(&Z, CC_TMP1, prqs, 0, 5, "Z(Ij,Ab)");
179
dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)");
180
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
181
dpd_buf4_axpy(&Z, &newL2, 1.0);
183
dpd_buf4_close(&newL2);
185
dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 10, 10, 10, 0, "Z(Ib,jA)");
186
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LIbjA");
187
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WMbeJ");
188
dpd_contract444(&W, &L2, &Z, 0, 1, 1.0, 0.0);
191
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 10, 10, 10, 10, 0, "LjAIb");
192
dpd_buf4_init(&W, CC_HBAR, 0, 10, 10, 10, 10, 0, "WmBEj");
193
dpd_contract444(&L2, &W, &Z, 1, 0, 1.0, 1.0);
196
dpd_buf4_sort(&Z, CC_TMP1, prqs, 0, 5, "Z(Ij,bA)");
198
dpd_buf4_init(&Z, CC_TMP1, L_irr, 0, 5, 0, 5, 0, "Z(Ij,bA)");
199
dpd_buf4_sort(&Z, CC_TMP0, pqsr, 0, 5, "Z(Ij,Ab)");
201
dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 5, 0, 5, 0, "Z(Ij,Ab)");
202
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
203
dpd_buf4_axpy(&Z, &newL2, 1.0);
205
dpd_buf4_close(&newL2);
207
else if(params.ref == 2) { /** UHF **/
209
dpd_buf4_init(&Z, CC_TMP2, L_irr, 20, 20, 20, 20, 0, "Z(IA,JB)");
210
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 20, 20, 20, 0, "LIAJB");
211
dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ");
212
dpd_contract444(&L2, &W, &Z, 0, 0, 1, 0);
215
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 30, 20, 30, 0, "LIAjb");
216
dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj");
217
dpd_contract444(&L2, &W, &Z, 0, 0, 1, 1);
220
dpd_buf4_sort(&Z, CC_TMP2, rqps, 20, 20, "Z(JA,IB)");
221
dpd_buf4_sort(&Z, CC_TMP2, psrq, 20, 20, "Z(IB,JA)");
222
dpd_buf4_sort(&Z, CC_TMP2, rspq, 20, 20, "Z(JB,IA)");
223
dpd_buf4_init(&Z2, CC_TMP2, L_irr, 20, 20, 20, 20, 0, "Z(JA,IB)");
224
dpd_buf4_axpy(&Z2, &Z, -1);
226
dpd_buf4_init(&Z2, CC_TMP2, L_irr, 20, 20, 20, 20, 0, "Z(IB,JA)");
227
dpd_buf4_axpy(&Z2, &Z, -1);
229
dpd_buf4_init(&Z2, CC_TMP2, L_irr, 20, 20, 20, 20, 0, "Z(JB,IA)");
230
dpd_buf4_axpy(&Z2, &Z, 1);
232
dpd_buf4_sort(&Z, CC_TMP2, prqs, 0, 5, "Z(IJ,AB)");
234
dpd_buf4_init(&Z, CC_TMP2, L_irr, 0, 5, 0, 5, 0, "Z(IJ,AB)");
235
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 0, 5, 2, 7, 0, "New LIJAB");
236
dpd_buf4_axpy(&Z, &newL2, 1);
238
dpd_buf4_close(&newL2);
240
dpd_buf4_init(&Z, CC_TMP2, L_irr, 30, 30, 30, 30, 0, "Z(ia,jb)");
241
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 30, 30, 30, 30, 0, "Liajb");
242
dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej");
243
dpd_contract444(&L2, &W, &Z, 0, 0, 1, 0);
246
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 30, 20, 30, 20, 0, "LiaJB");
247
dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ");
248
dpd_contract444(&L2, &W, &Z, 0, 0, 1, 1);
251
dpd_buf4_sort(&Z, CC_TMP2, rqps, 30, 30, "Z(ja,ib)");
252
dpd_buf4_sort(&Z, CC_TMP2, psrq, 30, 30, "Z(ib,ja)");
253
dpd_buf4_sort(&Z, CC_TMP2, rspq, 30, 30, "Z(jb,ia)");
254
dpd_buf4_init(&Z2, CC_TMP2, L_irr, 30, 30, 30, 30, 0, "Z(ja,ib)");
255
dpd_buf4_axpy(&Z2, &Z, -1);
257
dpd_buf4_init(&Z2, CC_TMP2, L_irr, 30, 30, 30, 30, 0, "Z(ib,ja)");
258
dpd_buf4_axpy(&Z2, &Z, -1);
260
dpd_buf4_init(&Z2, CC_TMP2, L_irr, 30, 30, 30, 30, 0, "Z(jb,ia)");
261
dpd_buf4_axpy(&Z2, &Z, 1);
263
dpd_buf4_sort(&Z, CC_TMP2, prqs, 10, 15, "Z(ij,ab)");
265
dpd_buf4_init(&Z, CC_TMP2, L_irr, 10, 15, 10, 15, 0, "Z(ij,ab)");
266
dpd_buf4_init(&newL2, CC_LAMBDA, L_irr, 10, 15, 12, 17, 0, "New Lijab");
267
dpd_buf4_axpy(&Z, &newL2, 1);
269
dpd_buf4_close(&newL2);
271
dpd_buf4_init(&Z, CC_TMP2, L_irr, 20, 30, 20, 30, 0, "Z(IA,jb)");
272
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 20, 20, 20, 0, "LIAJB");
273
dpd_buf4_init(&W, CC_HBAR, 0, 30, 20, 30, 20, 0, "WmBeJ");
274
dpd_contract444(&L2, &W, &Z, 0, 0, 1, 0);
277
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 20, 30, 20, 30, 0, "LIAjb");
278
dpd_buf4_init(&W, CC_HBAR, 0, 30, 30, 30, 30, 0, "Wmbej");
279
dpd_contract444(&L2, &W, &Z, 0, 0, 1, 1);
282
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 30, 30, 30, 30, 0, "Liajb");
283
dpd_buf4_init(&W, CC_HBAR, 0, 20, 30, 20, 30, 0, "WMbEj");
284
dpd_contract444(&W, &L2, &Z, 0, 0, 1.0, 1.0);
287
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 30, 20, 30, 20, 0, "LiaJB");
288
dpd_buf4_init(&W, CC_HBAR, 0, 20, 20, 20, 20, 0, "WMBEJ");
289
dpd_contract444(&W, &L2, &Z, 0, 0, 1, 1);
292
dpd_buf4_sort_axpy(&Z, CC_LAMBDA, prqs, 22, 28, "New LIjAb", 1);
294
dpd_buf4_init(&Z, CC_TMP2, L_irr, 24, 27, 24, 27, 0, "Z(Ib,jA)");
295
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 24, 27, 24, 27, 0, "LIbjA");
296
dpd_buf4_init(&W, CC_HBAR, 0, 24, 24, 24, 24, 0, "WMbeJ");
297
dpd_contract444(&W, &L2, &Z, 0, 1, 1, 0);
300
dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 27, 24, 27, 24, 0, "LjAIb");
301
dpd_buf4_init(&W, CC_HBAR, 0, 27, 27, 27, 27, 0, "WmBEj");
302
dpd_contract444(&L2, &W, &Z, 1, 0, 1, 1);
305
dpd_buf4_sort_axpy(&Z, CC_LAMBDA, prsq, 22, 28, "New LIjAb", 1);