~ubuntu-branches/ubuntu/quantal/psicode/quantal

« back to all changes in this revision

Viewing changes to src/bin/cis/Z.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 CIS
 
3
    \brief Enter brief description of file here 
 
4
*/
 
5
#include <cstdio>
 
6
#include <cstring>
 
7
#include <libdpd/dpd.h>
 
8
#include "MOInfo.h"
 
9
#include "Params.h"
 
10
#include "Local.h"
 
11
#define EXTERN
 
12
#include "globals.h"
 
13
 
 
14
namespace psi { namespace cis {
 
15
 
 
16
void Z_build(int irrep, int root, enum Spin spin)
 
17
{
 
18
  char lbl[32];
 
19
  dpdfile2 B, B_A, B_B;
 
20
  dpdbuf4 X, X1, X2, Z, F, E;
 
21
 
 
22
  if(params.ref == 0) { /** RHF **/
 
23
 
 
24
    if(spin == singlet)
 
25
      sprintf(lbl, "BIA(%d)[%d] singlet", root, irrep);
 
26
    else 
 
27
      sprintf(lbl, "BIA(%d)[%d] triplet", root, irrep);
 
28
 
 
29
    dpd_file2_init(&B, CC_OEI, irrep, 0, 1, lbl);
 
30
 
 
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);
 
34
 
 
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);
 
40
    dpd_buf4_close(&F);
 
41
    sprintf(lbl, "XjIbA[%d]", irrep);
 
42
    dpd_buf4_sort(&X, CC_TMP0, rspq, 0, 5, lbl);
 
43
    dpd_buf4_close(&X);
 
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);
 
50
    dpd_buf4_close(&X);
 
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);
 
54
    dpd_buf4_close(&X);
 
55
 
 
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);
 
61
    dpd_buf4_close(&E);
 
62
    sprintf(lbl, "XjIbA[%d]", irrep);
 
63
    dpd_buf4_sort(&X, CC_TMP1, qpsr, 0, 5, lbl);
 
64
 
 
65
    dpd_buf4_axpy(&X, &Z, 1);
 
66
    dpd_buf4_close(&X);
 
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);
 
71
    dpd_buf4_close(&X);
 
72
 
 
73
    /* Spin-adapt Z */
 
74
    if(spin == singlet) {
 
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);
 
79
      dpd_buf4_close(&Z);
 
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);
 
85
      dpd_buf4_close(&X);
 
86
    }
 
87
    else {
 
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);
 
92
      dpd_buf4_close(&Z);
 
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);
 
98
      dpd_buf4_close(&X);
 
99
    }
 
100
    dpd_buf4_close(&Z);
 
101
 
 
102
    dpd_file2_close(&B);
 
103
 
 
104
  }
 
105
  else if(params.ref == 2) { /** UHF **/
 
106
 
 
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);
 
111
 
 
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);
 
117
    dpd_buf4_close(&F);
 
118
    sprintf(lbl, "XJIAB[%d]", irrep);
 
119
    dpd_buf4_sort(&X, CC_TMP0, qprs, 0, 7, lbl);
 
120
    dpd_buf4_close(&X);
 
121
 
 
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);
 
127
    dpd_buf4_close(&X2);
 
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);
 
132
    dpd_buf4_close(&Z);
 
133
    dpd_buf4_close(&X1);
 
134
 
 
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);
 
140
    dpd_buf4_close(&E);
 
141
    sprintf(lbl, "XIJBA[%d]", irrep);
 
142
    dpd_buf4_sort(&X, CC_TMP1, pqsr, 2, 5, lbl);
 
143
    dpd_buf4_close(&X);
 
144
 
 
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);
 
150
    dpd_buf4_close(&X2);
 
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);
 
154
    dpd_buf4_close(&Z);
 
155
    dpd_buf4_close(&X1);
 
156
 
 
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);
 
162
    dpd_buf4_close(&F);
 
163
    sprintf(lbl, "Xjiab[%d]", irrep);
 
164
    dpd_buf4_sort(&X, CC_TMP0, qprs, 10, 17, lbl);
 
165
    dpd_buf4_close(&X);
 
166
 
 
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);
 
172
    dpd_buf4_close(&X2);
 
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);
 
177
    dpd_buf4_close(&Z);
 
178
    dpd_buf4_close(&X1);
 
179
 
 
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);
 
185
    dpd_buf4_close(&E);
 
186
    sprintf(lbl, "Xijba[%d]", irrep);
 
187
    dpd_buf4_sort(&X, CC_TMP1, pqsr, 12, 15, lbl);
 
188
    dpd_buf4_close(&X);
 
189
 
 
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);
 
195
    dpd_buf4_close(&X2);
 
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);
 
199
    dpd_buf4_close(&Z);
 
200
    dpd_buf4_close(&X1);
 
201
 
 
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);
 
207
    dpd_buf4_close(&F);
 
208
    dpd_buf4_close(&Z);
 
209
 
 
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);
 
215
    dpd_buf4_close(&F);
 
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);
 
219
    dpd_buf4_close(&X);
 
220
 
 
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);
 
226
    dpd_buf4_close(&E);
 
227
    dpd_buf4_close(&Z);
 
228
 
 
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);
 
234
    dpd_buf4_close(&E);
 
235
    dpd_buf4_close(&Z);
 
236
 
 
237
    dpd_file2_close(&B_A);
 
238
    dpd_file2_close(&B_B);
 
239
  }
 
240
 
 
241
}
 
242
 
 
243
}} // namespace psi::cis