~ubuntu-branches/ubuntu/karmic/psicode/karmic

« back to all changes in this revision

Viewing changes to src/bin/cclambda/WefabL2.cc

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck, Michael Banck, Daniel Leidert
  • Date: 2009-02-23 00:12:02 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20090223001202-rutldoy3dimfpesc
Tags: 3.4.0-1
* New upstream release.

[ Michael Banck ]
* debian/patches/01_DESTDIR.dpatch: Refreshed.
* debian/patches/02_FHS.dpatch: Removed, applied upstream.
* debian/patches/03_debian_docdir: Likewise.
* debian/patches/04_man.dpatch: Likewise.
* debian/patches/06_466828_fix_gcc_43_ftbfs.dpatch: Likewise.
* debian/patches/07_464867_move_executables: Fixed and refreshed.
* debian/patches/00list: Adjusted.
* debian/control: Improved description.
* debian/patches-held: Removed.
* debian/rules (install/psi3): Do not ship the ruby bindings for now.

[ Daniel Leidert ]
* debian/rules: Fix txtdir via DEB_MAKE_INSTALL_TARGET.
* debian/patches/01_DESTDIR.dpatch: Refreshed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*! \file
 
2
    \ingroup CCLAMBDA
 
3
    \brief Enter brief description of file here 
 
4
*/
 
5
#include <cstdio>
 
6
#include <cstring>
 
7
#include <cmath>
 
8
#include <libqt/qt.h>
 
9
#include <libciomr/libciomr.h>
 
10
#include <libdpd/dpd.h>
 
11
#include "MOInfo.h"
 
12
#include "Params.h"
 
13
#define EXTERN
 
14
#include "globals.h"
 
15
 
 
16
namespace psi { namespace cclambda {
 
17
 
 
18
/* WefabL2(): Computes the contribution of the Wefab HBAR matrix
 
19
** elements to the Lambda double de-excitation amplitude equations.
 
20
** These contributions are given in spin-orbitals as:
 
21
** 
 
22
** L_ij^ab = 1/2 L_ij^ef Wefab
 
23
**
 
24
** where W_efab is defined in spin orbitals as:
 
25
**
 
26
** Wefab = <ef||ab> - P(ef) t_m^f <em||ab> + 1/2 tau_mn^ef <mn||ab>
 
27
**
 
28
** and tau_mn^ef = t_mn^ef + t_m^e t_n^f - t_m^f t_n^e.
 
29
**
 
30
** [cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).]
 
31
**
 
32
** NB: Wefab is not symmetric, so one must be careful when defining
 
33
** intermediate quantities for efficient contractions.  I use the
 
34
** following contraction steps for each spin case:
 
35
**
 
36
** Wefab term II spin cases: 
 
37
**
 
38
**   L_IJ^AB <-- 1/2 ( -t_M^F <EM||AB> L_IJ^EF + t_M^E <FM||AB> L_IJ^EF )
 
39
**
 
40
**     Z(IJ,EM) = -t_M^F L_IJ^EF
 
41
**
 
42
**   L_IJ^AB <-- Z(IJ,EM) <EM||AB>
 
43
*******
 
44
**   L_ij^ab <-- 1/2 ( -t_m^f <em||ab> L_ij^ef + t_m^e <fm||ab> L_ij^ef )
 
45
**
 
46
**     Z(ij,em) = -t_m^f L_ij^ef
 
47
**
 
48
**   L_ij^ab <-- Z(ij,em) <em||ab>
 
49
*******
 
50
**   L_Ij^Ab <-- -t_m^f <Em|Ab> L_Ij^Ef - t_M^E <Mf|Ab>  L_Ij^Ef
 
51
**
 
52
**     Z(Ij,Em) = -t_m^f L_Ij^Ef
 
53
**     Z(Ij,Mf) = -t_M^E L_Ij^Ef
 
54
**
 
55
**   L_Ij^Ab <-- Z(Ij,Em) <Em|Ab> + Z(Ij,Mf) <Mf|Ab>
 
56
**
 
57
** Wefab term III:
 
58
**
 
59
**   L_IJ^AB <-- 1/4 tau_MN^EF <MN||AB> L_IJ^EF
 
60
**
 
61
**     Z(IJ,MN) = 1/2 tau_MN^EF L_IJ^EF
 
62
**
 
63
**   L_IJ^AB <-- 1/2 Z(IJ,MN) <MN||AB>
 
64
*******
 
65
**   L_ij^ab <-- 1/4 tau_mn^ef <mn||ab> L_ij^ef
 
66
**
 
67
**     Z(ij,mn) = 1/2 tau_mn^ef L_ij^ef
 
68
**
 
69
**   L_ij^ab <-- 1/2 Z(ij,mn) <mn||ab>
 
70
*******
 
71
**   L_Ij^Ab <-- tau_Mn^Ef <Mn|Ab> L_Ij^Ef
 
72
**
 
73
**     Z(Ij,Mn) = tau_Mn^Ef L_Ij^Ef
 
74
**
 
75
**   L_Ij^Ab <-- Z(Ij,Mn) <Mn|Ab>
 
76
*******
 
77
**
 
78
** TDC, July 2002
 
79
*/
 
80
 
 
81
void WefabL2(int L_irr)
 
82
{
 
83
  dpdbuf4 Lijab, LIJAB, LIjAb;
 
84
  dpdbuf4 newLijab, newLIJAB, newLIjAb;
 
85
  dpdbuf4 Tau, T2, Z, Z1, Z2, L, L2, B, D, F, Ltmp;
 
86
  dpdfile2 tIA, tia;
 
87
  dpdbuf4 tau_a, tau_s, tau;
 
88
  dpdbuf4 B_a, B_s;
 
89
  dpdbuf4 S, A;
 
90
  int h;
 
91
  double **B_diag, **tau_diag;
 
92
  int ij, Gc, C, c, cc;
 
93
  int nbuckets, rows_per_bucket, rows_left, m, row_start, ab, cd, dc, d;
 
94
  int nrows, ncols, nlinks;
 
95
  psio_address next;
 
96
 
 
97
  /* RHS += Wefab*Lijef  */
 
98
  if(params.ref == 0) { /** RHF **/
 
99
 
 
100
    if(!strcmp(params.abcd,"OLD")) {
 
101
      dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
102
      dpd_buf4_init(&Z, CC_TMP0, L_irr, 5, 0, 5, 0, 0, "ZAbIj");
 
103
      dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>");
 
104
      dpd_contract444(&B, &LIjAb, &Z, 0, 0, 1, 0);
 
105
      dpd_buf4_close(&B);
 
106
      dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1);
 
107
      dpd_buf4_close(&Z);
 
108
      dpd_buf4_close(&LIjAb);
 
109
    }
 
110
    else if(!strcmp(params.abcd,"NEW")) {
 
111
      timer_on("ABCD:new");
 
112
 
 
113
      /* L_a(-)(ij,ab) (i>j, a>b) = L(ij,ab) - L(ij,ba) */
 
114
      dpd_buf4_init(&tau_a, CC_LAMBDA, L_irr, 4, 9, 0, 5, 1, "LIjAb");
 
115
      dpd_buf4_copy(&tau_a, CC_LAMBDA, "L(-)(ij,ab)");
 
116
      dpd_buf4_close(&tau_a);
 
117
 
 
118
      /* L_s(+)(ij,ab) (i>=j, a>=b) = L(ij,ab) + L(ij,ba) */
 
119
      dpd_buf4_init(&tau_a, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
120
      dpd_buf4_copy(&tau_a, CC_TMP0, "L(+)(ij,ab)");
 
121
      dpd_buf4_sort_axpy(&tau_a, CC_TMP0, pqsr, 0, 5, "L(+)(ij,ab)", 1);
 
122
      dpd_buf4_close(&tau_a);
 
123
      dpd_buf4_init(&tau_a, CC_TMP0, L_irr, 3, 8, 0, 5, 0, "L(+)(ij,ab)");
 
124
      dpd_buf4_copy(&tau_a, CC_LAMBDA, "L(+)(ij,ab)");
 
125
      dpd_buf4_close(&tau_a);
 
126
 
 
127
      timer_on("ABCD:S");
 
128
      dpd_buf4_init(&tau_s, CC_LAMBDA, L_irr, 3, 8, 3, 8, 0, "L(+)(ij,ab)");
 
129
      dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>");
 
130
      dpd_buf4_init(&S, CC_TMP0, L_irr, 8, 3, 8, 3, 0, "S(ab,ij)");
 
131
      dpd_contract444(&B_s, &tau_s, &S, 0, 0, 0.5, 0);
 
132
      dpd_buf4_close(&S);
 
133
      dpd_buf4_close(&B_s);
 
134
      dpd_buf4_close(&tau_s);
 
135
      timer_off("ABCD:S");
 
136
 
 
137
      /* L_diag(ij,c)  = 2 * L(ij,cc)*/
 
138
 
 
139
      /* NB: Gcc = 0, and B is totally symmetric, so Gab = 0 */
 
140
      /* But Gij = L_irr ^ Gab = L_irr */
 
141
      dpd_buf4_init(&tau, CC_LAMBDA, L_irr, 3, 8, 3, 8, 0, "L(+)(ij,ab)");
 
142
      dpd_buf4_mat_irrep_init(&tau, L_irr);
 
143
      dpd_buf4_mat_irrep_rd(&tau, L_irr);
 
144
      tau_diag = dpd_block_matrix(tau.params->rowtot[L_irr], moinfo.nvirt);
 
145
      for(ij=0; ij < tau.params->rowtot[L_irr]; ij++)
 
146
        for(Gc=0; Gc < moinfo.nirreps; Gc++)
 
147
          for(C=0; C < moinfo.virtpi[Gc]; C++) {
 
148
            c = C + moinfo.vir_off[Gc];
 
149
            cc = tau.params->colidx[c][c];
 
150
            tau_diag[ij][c] = tau.matrix[L_irr][ij][cc];
 
151
          }
 
152
      dpd_buf4_mat_irrep_close(&tau, L_irr);
 
153
 
 
154
      dpd_buf4_init(&B_s, CC_BINTS, 0, 8, 8, 8, 8, 0, "B(+) <ab|cd> + <ab|dc>");
 
155
      dpd_buf4_init(&S, CC_TMP0, L_irr, 8, 3, 8, 3, 0, "S(ab,ij)");
 
156
      dpd_buf4_mat_irrep_init(&S, 0);
 
157
      dpd_buf4_mat_irrep_rd(&S, 0);
 
158
 
 
159
      rows_per_bucket = dpd_memfree()/(B_s.params->coltot[0] + moinfo.nvirt);
 
160
      if(rows_per_bucket > B_s.params->rowtot[0]) rows_per_bucket = B_s.params->rowtot[0];
 
161
      nbuckets = (int) ceil((double) B_s.params->rowtot[0]/(double) rows_per_bucket);
 
162
      rows_left = B_s.params->rowtot[0] % rows_per_bucket;
 
163
 
 
164
      B_diag = dpd_block_matrix(rows_per_bucket, moinfo.nvirt);
 
165
      next = PSIO_ZERO;
 
166
      ncols = tau.params->rowtot[L_irr];
 
167
      nlinks = moinfo.nvirt;
 
168
      for(m=0; m < (rows_left ? nbuckets-1:nbuckets); m++) {
 
169
        row_start = m * rows_per_bucket;
 
170
        nrows = rows_per_bucket;
 
171
        if(nrows && ncols && nlinks) {
 
172
          psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next);
 
173
          C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks,
 
174
                  tau_diag[0], nlinks, 1, S.matrix[0][row_start], ncols);
 
175
        }
 
176
 
 
177
      }
 
178
      if(rows_left) {
 
179
        row_start = m * rows_per_bucket;
 
180
        nrows = rows_left;
 
181
        if(nrows && ncols && nlinks) {
 
182
          psio_read(CC_BINTS,"B(+) <ab|cc>",(char *) B_diag[0],nrows*nlinks*sizeof(double),next, &next);
 
183
          C_DGEMM('n', 't', nrows, ncols, nlinks, -0.25, B_diag[0], nlinks,
 
184
                  tau_diag[0], nlinks, 1, S.matrix[0][row_start], ncols);
 
185
        }
 
186
      }
 
187
      dpd_buf4_mat_irrep_wrt(&S, 0);
 
188
      dpd_buf4_mat_irrep_close(&S, 0);
 
189
      dpd_buf4_close(&S);
 
190
      dpd_buf4_close(&B_s);
 
191
      dpd_free_block(B_diag, rows_per_bucket, moinfo.nvirt);
 
192
      dpd_free_block(tau_diag, tau.params->rowtot[L_irr], moinfo.nvirt);
 
193
      dpd_buf4_close(&tau);
 
194
 
 
195
      timer_on("ABCD:A");
 
196
      dpd_buf4_init(&tau_a, CC_LAMBDA, L_irr, 4, 9, 4, 9, 0, "L(-)(ij,ab)");
 
197
      dpd_buf4_init(&B_a, CC_BINTS, 0, 9, 9, 9, 9, 0, "B(-) <ab|cd> - <ab|dc>");
 
198
      dpd_buf4_init(&A, CC_TMP0, L_irr, 9, 4, 9, 4, 0, "A(ab,ij)");
 
199
      dpd_contract444(&B_a, &tau_a, &A, 0, 0, 0.5, 0);
 
200
      dpd_buf4_close(&A);
 
201
      dpd_buf4_close(&B_a);
 
202
      dpd_buf4_close(&tau_a);
 
203
      timer_off("ABCD:A");
 
204
 
 
205
      timer_on("ABCD:axpy");
 
206
      dpd_buf4_init(&S, CC_TMP0, L_irr, 5, 0, 8, 3, 0, "S(ab,ij)");
 
207
      dpd_buf4_sort_axpy(&S, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1);
 
208
      dpd_buf4_close(&S);
 
209
      dpd_buf4_init(&A, CC_TMP0, L_irr, 5, 0, 9, 4, 0, "A(ab,ij)");
 
210
      dpd_buf4_sort_axpy(&A, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1);
 
211
      dpd_buf4_close(&A);
 
212
      timer_off("ABCD:axpy");
 
213
      timer_off("ABCD:new");
 
214
    }
 
215
 
 
216
    dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
 
217
 
 
218
    dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
 
219
    dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
220
    dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 0, 10, 0, 0, "Z(Mf,Ij)");
 
221
    dpd_contract244(&tIA, &LIjAb, &Z, 1, 2, 0, 1, 0);
 
222
    dpd_buf4_close(&Z);
 
223
    dpd_buf4_close(&LIjAb);
 
224
    dpd_file2_close(&tIA);
 
225
 
 
226
    dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>");
 
227
    dpd_buf4_init(&Z, CC_TMP0, L_irr, 10, 0, 10, 0, 0, "Z(Mf,Ij)");
 
228
    dpd_buf4_init(&Z1, CC_TMP0, L_irr, 5, 0, 5, 0, 0, "Z(Ab,Ij)");
 
229
    dpd_contract444(&F, &Z, &Z1, 1, 1, -1, 0);
 
230
    dpd_buf4_close(&Z);
 
231
    dpd_buf4_close(&F);
 
232
    dpd_buf4_close(&newLIjAb);
 
233
    dpd_buf4_sort_axpy(&Z1, CC_LAMBDA, srqp, 0, 5, "New LIjAb", 1);
 
234
    dpd_buf4_sort_axpy(&Z1, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1);
 
235
    dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
 
236
    dpd_buf4_close(&Z1);
 
237
 
 
238
    dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 0, 0, 0, 0, "Z(Ij,Mn)");
 
239
    dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb");
 
240
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
241
    dpd_contract444(&L2, &Tau, &Z, 0, 0, 1.0, 0.0);
 
242
    dpd_buf4_close(&L2);
 
243
    dpd_buf4_close(&Tau);
 
244
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
 
245
    dpd_contract444(&Z, &D, &newLIjAb, 0, 1, 1.0, 1.0);
 
246
    dpd_buf4_close(&D);
 
247
    dpd_buf4_close(&Z);
 
248
 
 
249
    dpd_buf4_close(&newLIjAb);
 
250
 
 
251
  }
 
252
  else if(params.ref == 1) { /** ROHF **/
 
253
 
 
254
    dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
 
255
    dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia");
 
256
 
 
257
    dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB");
 
258
    dpd_buf4_init(&Z, CC_TMP2, L_irr, 7, 2, 7, 2, 0, "ZABIJ");
 
259
    dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>");
 
260
    dpd_contract444(&B, &LIJAB, &Z, 0, 0, 1, 0);
 
261
    dpd_buf4_close(&B);
 
262
    dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 2, 7, "New LIJAB", 1);
 
263
    dpd_buf4_close(&LIJAB);
 
264
    dpd_buf4_close(&Z);
 
265
 
 
266
    dpd_buf4_init(&newLIJAB, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB");
 
267
 
 
268
    dpd_buf4_init(&LIJAB, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB");
 
269
    dpd_buf4_init(&Ltmp, CC_TMP0, L_irr, 2, 10, 2, 10, 0, "Ltmp (I>J,MF)");
 
270
    dpd_buf4_init(&F, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>");
 
271
    dpd_contract244(&tIA, &LIJAB, &Ltmp, 1, 2, 1, 1.0, 0.0);
 
272
    dpd_contract444(&Ltmp, &F, &newLIJAB, 0, 1, -1.0, 1.0);
 
273
    dpd_buf4_close(&F);
 
274
    dpd_buf4_close(&Ltmp);
 
275
    dpd_buf4_close(&LIJAB);
 
276
 
 
277
    dpd_buf4_init(&Z, CC_TMP0, L_irr, 2, 2, 2, 2, 0, "Z(IJ,MN)");
 
278
    dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB");
 
279
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB");
 
280
    dpd_contract444(&L2, &Tau, &Z, 0, 0, 1.0, 0.0);
 
281
    dpd_buf4_close(&L2);
 
282
    dpd_buf4_close(&Tau);
 
283
    dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)");
 
284
    dpd_contract444(&Z, &D, &newLIJAB, 0, 1, 1.0, 1.0);
 
285
    dpd_buf4_close(&D);
 
286
    dpd_buf4_close(&Z);
 
287
    dpd_buf4_close(&newLIJAB);
 
288
 
 
289
    dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab");
 
290
    dpd_buf4_init(&Z, CC_TMP2, L_irr, 7, 2, 7, 2, 0, "Zabij");
 
291
    dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>");
 
292
    dpd_contract444(&B, &Lijab, &Z, 0, 0, 1, 0);
 
293
    dpd_buf4_close(&B);
 
294
    dpd_buf4_close(&Lijab);
 
295
    dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 2, 7, "New Lijab", 1);
 
296
    dpd_buf4_close(&Z);
 
297
 
 
298
    dpd_buf4_init(&newLijab, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New Lijab");
 
299
 
 
300
    dpd_buf4_init(&Lijab, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "Lijab");
 
301
    dpd_buf4_init(&Ltmp, CC_TMP0, L_irr, 2, 10, 2, 10, 0, "Ltmp (i>j,mf)");
 
302
    dpd_buf4_init(&F, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>");
 
303
    dpd_contract244(&tia, &Lijab, &Ltmp, 1, 2, 1, 1.0, 0.0);
 
304
    dpd_contract444(&Ltmp, &F, &newLijab, 0, 1, -1.0, 1.0);
 
305
    dpd_buf4_close(&F);
 
306
    dpd_buf4_close(&Ltmp);
 
307
    dpd_buf4_close(&Lijab);
 
308
 
 
309
    dpd_buf4_init(&Z, CC_TMP0, L_irr, 2, 2, 2, 2, 0, "Z(ij,mn)");
 
310
    dpd_buf4_init(&Tau, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauijab");
 
311
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "Lijab");
 
312
    dpd_contract444(&L2, &Tau, &Z, 0, 0, 1.0, 0.0);
 
313
    dpd_buf4_close(&L2);
 
314
    dpd_buf4_close(&Tau);
 
315
    dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)");
 
316
    dpd_contract444(&Z, &D, &newLijab, 0, 1, 1.0, 1.0);
 
317
    dpd_buf4_close(&D);
 
318
    dpd_buf4_close(&Z);
 
319
    dpd_buf4_close(&newLijab);
 
320
 
 
321
 
 
322
    dpd_buf4_init(&LIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
323
    dpd_buf4_init(&Z, CC_TMP2, L_irr, 5, 0, 5, 0, 0, "ZAbIj");
 
324
    dpd_buf4_init(&B, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>");
 
325
    dpd_contract444(&B, &LIjAb, &Z, 0, 0, 1, 0);
 
326
    dpd_buf4_close(&B);
 
327
    dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 0, 5, "New LIjAb", 1);
 
328
    dpd_buf4_close(&Z);
 
329
 
 
330
    dpd_buf4_init(&newLIjAb, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "New LIjAb");
 
331
 
 
332
    dpd_buf4_init(&Ltmp, CC_TMP1, L_irr, 0, 11, 0, 11, 0, "Lt (Ij,Em)");
 
333
    dpd_contract424(&LIjAb, &tia, &Ltmp, 3, 1, 0, 1.0, 0.0);
 
334
    dpd_buf4_sort(&Ltmp, CC_TMP2, pqsr, 0, 10, "Lt (Ij,mE)");
 
335
    dpd_buf4_close(&Ltmp);
 
336
    dpd_buf4_init(&Ltmp, CC_TMP3, L_irr, 0, 10, 0, 10, 0, "Lt (Ij,Mf)");
 
337
    dpd_contract244(&tIA, &LIjAb, &Ltmp, 1, 2, 1, 1.0, 0.0);
 
338
    dpd_buf4_close(&Ltmp);
 
339
 
 
340
    dpd_buf4_close(&LIjAb);
 
341
 
 
342
    dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>");
 
343
    dpd_buf4_init(&Ltmp, CC_TMP3, L_irr, 0, 10, 0, 10, 0, "Lt (Ij,Mf)");
 
344
    dpd_contract444(&Ltmp, &F, &newLIjAb, 0, 1, -1.0, 1.0);
 
345
    dpd_buf4_close(&Ltmp);
 
346
    dpd_buf4_sort(&F, CC_TMP0, pqsr, 10, 5, "<me|ab> (mE,Ab)");
 
347
    dpd_buf4_close(&F);
 
348
 
 
349
    dpd_buf4_init(&F, CC_TMP0, 0, 10, 5, 10, 5, 0, "<me|ab> (mE,Ab)");
 
350
    dpd_buf4_init(&Ltmp, CC_TMP2, L_irr, 0, 10, 0, 10, 0, "Lt (Ij,mE)");
 
351
    dpd_contract444(&Ltmp, &F, &newLIjAb, 0, 1, -1.0, 1.0);
 
352
    dpd_buf4_close(&Ltmp);
 
353
    dpd_buf4_close(&F);
 
354
 
 
355
    dpd_buf4_init(&Z, CC_TMP0, L_irr, 0, 0, 0, 0, 0, "Z(Ij,Mn)");
 
356
    dpd_buf4_init(&Tau, CC_TAMPS, 0, 0, 5, 0, 5, 0, "tauIjAb");
 
357
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 0, 5, 0, 5, 0, "LIjAb");
 
358
    dpd_contract444(&L2, &Tau, &Z, 0, 0, 1.0, 0.0);
 
359
    dpd_buf4_close(&L2);
 
360
    dpd_buf4_close(&Tau);
 
361
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
 
362
    dpd_contract444(&Z, &D, &newLIjAb, 0, 1, 1.0, 1.0);
 
363
    dpd_buf4_close(&D);
 
364
    dpd_buf4_close(&Z);
 
365
 
 
366
    dpd_buf4_close(&newLIjAb);
 
367
 
 
368
    dpd_file2_close(&tIA);
 
369
    dpd_file2_close(&tia);
 
370
  }
 
371
  else if(params.ref == 2) { /** UHF **/
 
372
 
 
373
    dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
 
374
    dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia");
 
375
 
 
376
 
 
377
    /** Z(AB,IJ) = <AB||CD> L(IJ,CD) **/
 
378
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 7, 2, 7, 2, 0, "Z(AB,IJ)");
 
379
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB");
 
380
    dpd_buf4_init(&B, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <AB|CD>");
 
381
    dpd_contract444(&B, &L2, &Z, 0, 0, 1, 0);
 
382
    dpd_buf4_close(&B);
 
383
    dpd_buf4_close(&L2);
 
384
    /** Z(AB,IJ) --> New L(IJ,AB) **/
 
385
    dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 2, 7, "New LIJAB", 1);
 
386
    dpd_buf4_close(&Z);
 
387
 
 
388
    /** Z(IJ,EM) = -L(IJ,EFf) t(M,F) **/
 
389
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 2, 21, 2, 21, 0, "Z(IJ,EM)");
 
390
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 5, 2, 7, 0, "LIJAB");
 
391
    dpd_contract424(&L2, &tIA, &Z, 3, 1, 0, -1, 0);
 
392
    dpd_buf4_close(&L2);
 
393
    /** New L(IJ,AB) <-- Z(IJ,EM) <EM||AB> **/
 
394
    dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>");
 
395
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB");
 
396
    dpd_contract444(&Z, &F, &L2, 0, 1, 1, 1);
 
397
    dpd_buf4_close(&L2);
 
398
    dpd_buf4_close(&F);
 
399
    dpd_buf4_close(&Z);
 
400
 
 
401
    /** Z(IJ,MN) = 1/2 L(IJ,EF) tau_MN^EF **/
 
402
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 2, 2, 2, 2, 0, "Z(IJ,MN)");
 
403
    dpd_buf4_init(&T2, CC_TAMPS, 0, 2, 7, 2, 7, 0, "tauIJAB");
 
404
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "LIJAB");
 
405
    dpd_contract444(&L2, &T2, &Z, 0, 0, 1, 0);
 
406
    dpd_buf4_close(&L2);
 
407
    dpd_buf4_close(&T2);
 
408
    /** New L(IJ,AB) <-- 1/2 Z(IJ,MN) <MN||AB> **/
 
409
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 2, 7, 2, 7, 0, "New LIJAB");
 
410
    dpd_buf4_init(&D, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <IJ||AB> (I>J,A>B)");
 
411
    dpd_contract444(&Z, &D, &L2, 0, 1, 1, 1);
 
412
    dpd_buf4_close(&D);
 
413
    dpd_buf4_close(&L2);
 
414
    dpd_buf4_close(&Z);
 
415
 
 
416
 
 
417
    /** Z(ab,ij) = <ab||cd> L(ij,cd) **/
 
418
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 17, 12, 17, 12, 0, "Z(ab,ij)");
 
419
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab");
 
420
    dpd_buf4_init(&B, CC_BINTS, 0, 17, 17, 15, 15, 1, "B <ab|cd>");
 
421
    dpd_contract444(&B, &L2, &Z, 0, 0, 1, 0);
 
422
    dpd_buf4_close(&B);
 
423
    dpd_buf4_close(&L2);
 
424
    /** Z(ab,ij) --> New L(ij,ab) **/
 
425
    dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 12, 17, "New Lijab", 1);
 
426
    dpd_buf4_close(&Z);
 
427
 
 
428
    /** Z(ij,em) = -L(ij,ef) t(m,f) **/
 
429
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 12, 31, 12, 31, 0, "Z(ij,em)");
 
430
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 15, 12, 17, 0, "Lijab");
 
431
    dpd_contract424(&L2, &tia, &Z, 3, 1, 0, -1, 0);
 
432
    dpd_buf4_close(&L2);
 
433
    /** New L(ij,ab) <-- Z(ij,em) <em||ab> **/
 
434
    dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>");
 
435
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab");
 
436
    dpd_contract444(&Z, &F, &L2, 0, 1, 1, 1);
 
437
    dpd_buf4_close(&L2);
 
438
    dpd_buf4_close(&F);
 
439
    dpd_buf4_close(&Z);
 
440
 
 
441
    /** Z(ij,mn) = 1/2 L(ij,ef) tau_mn^ef **/
 
442
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 12, 12, 12, 12, 0, "Z(ij,mn)");
 
443
    dpd_buf4_init(&T2, CC_TAMPS, 0, 12, 17, 12, 17, 0, "tauijab");
 
444
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "Lijab");
 
445
    dpd_contract444(&L2, &T2, &Z, 0, 0, 1, 0);
 
446
    dpd_buf4_close(&L2);
 
447
    dpd_buf4_close(&T2);
 
448
    /** New L(ij,ab) <-- 1/2 Z(ij,mn) <mn||ab> **/
 
449
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 12, 17, 12, 17, 0, "New Lijab");
 
450
    dpd_buf4_init(&D, CC_DINTS, 0, 12, 17, 12, 17, 0, "D <ij||ab> (i>j,a>b)");
 
451
    dpd_contract444(&Z, &D, &L2, 0, 1, 1, 1);
 
452
    dpd_buf4_close(&D);
 
453
    dpd_buf4_close(&L2);
 
454
    dpd_buf4_close(&Z);
 
455
 
 
456
 
 
457
    /** Z(Ab,Ij) = <Ab|Cd> L(Ij,Cd) **/
 
458
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 28, 22, 28, 22, 0, "Z(Ab,Ij)");
 
459
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb");
 
460
    dpd_buf4_init(&B, CC_BINTS, 0, 28, 28, 28, 28, 0, "B <Ab|Cd>");
 
461
    dpd_contract444(&B, &L2, &Z, 0, 0, 1, 0);
 
462
    dpd_buf4_close(&B);
 
463
    dpd_buf4_close(&L2);
 
464
    /** Z(Ab,Ij) --> New L(Ij,Ab) **/
 
465
    dpd_buf4_sort_axpy(&Z, CC_LAMBDA, rspq, 22, 28, "New LIjAb", 1);
 
466
    dpd_buf4_close(&Z);
 
467
 
 
468
    /** Z(Ij,Em) = -L(Ij,Ef) t(m,f) **/
 
469
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 22, 26, 22, 26, 0, "Z(Ij,Em)");
 
470
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb");
 
471
    dpd_contract424(&L2, &tia, &Z, 3, 1, 0, -1, 0);
 
472
    dpd_buf4_close(&L2);
 
473
    /** New L(Ij,Ab) <-- Z(Ij,Em) <Em|Ab> **/
 
474
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb");
 
475
    dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>");
 
476
    dpd_contract444(&Z, &F, &L2, 0, 1, 1, 1);
 
477
    dpd_buf4_close(&F);
 
478
    dpd_buf4_close(&L2);
 
479
    dpd_buf4_close(&Z);
 
480
 
 
481
    /** Z(Ij,Mf) = -t(M,E) L(Ij,Ef) **/
 
482
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 22, 24, 22, 24, 0, "Z(Ij,Mf)");
 
483
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb");
 
484
    dpd_contract244(&tIA, &L2, &Z, 1, 2, 1, -1, 0);
 
485
    dpd_buf4_close(&L2);
 
486
    /** New L(Ij,Ab) <-- Z(Ij,Mf) <Mf|Ab> **/
 
487
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb");
 
488
    dpd_buf4_init(&F, CC_FINTS, 0, 24, 28, 24, 28, 0, "F <Ia|Bc>");
 
489
    dpd_contract444(&Z, &F, &L2, 0, 1, 1, 1);
 
490
    dpd_buf4_close(&F);
 
491
    dpd_buf4_close(&L2);
 
492
    dpd_buf4_close(&Z);
 
493
 
 
494
    /** Z(Ij,Mn) = L(Ij,Ef) tau(Mn,Ef) **/
 
495
    dpd_buf4_init(&Z, CC_TMP1, L_irr, 22, 22, 22, 22, 0, "Z(Ij,Mn)");
 
496
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "LIjAb");
 
497
    dpd_buf4_init(&T2, CC_TAMPS, 0, 22, 28, 22, 28, 0, "tauIjAb");
 
498
    dpd_contract444(&L2, &T2, &Z, 0, 0, 1, 0);
 
499
    dpd_buf4_close(&T2);
 
500
    dpd_buf4_close(&L2);
 
501
    /** New L(Ij,Ab) <-- Z(Ij,Mn) <Mn|Ab> **/
 
502
    dpd_buf4_init(&L2, CC_LAMBDA, L_irr, 22, 28, 22, 28, 0, "New LIjAb");
 
503
    dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>");
 
504
    dpd_contract444(&Z, &D, &L2, 0, 1, 1, 1);
 
505
    dpd_buf4_close(&D);
 
506
    dpd_buf4_close(&L2);
 
507
    dpd_buf4_close(&Z);
 
508
 
 
509
    dpd_file2_close(&tIA);
 
510
    dpd_file2_close(&tia);
 
511
 
 
512
  }
 
513
 
 
514
}
 
515
 
 
516
}} // namespace psi::cclambda