~ubuntu-branches/ubuntu/trusty/psicode/trusty

« back to all changes in this revision

Viewing changes to src/bin/ccenergy/cc3_Wamef.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck
  • Date: 2008-06-07 16:49:57 UTC
  • mfrom: (2.1.2 hardy)
  • Revision ID: james.westby@ubuntu.com-20080607164957-8pifvb133yjlkagn
Tags: 3.3.0-3
* debian/rules (DEB_MAKE_CHECK_TARGET): Do not abort test suite on
  failures.
* debian/rules (DEB_CONFIGURE_EXTRA_FLAGS): Set ${bindir} to /usr/lib/psi.
* debian/rules (install/psi3): Move psi3 file to /usr/bin.
* debian/patches/07_464867_move_executables.dpatch: New patch, add
  /usr/lib/psi to the $PATH, so that the moved executables are found.
  (closes: #464867)
* debian/patches/00list: Adjusted.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <libdpd/dpd.h>
 
2
#define EXTERN
 
3
#include "globals.h"
 
4
 
 
5
/* cc3_Wamef(): Compute the Wamef matrix from CC3 theory, which is
 
6
** given in spin-orbitals as:
 
7
** 
 
8
** Wamef = <am||ef> - t_n^a <nm||ef>
 
9
**
 
10
** TDC, Feb 2004
 
11
*/
 
12
 
 
13
void purge_Wamef(void);
 
14
 
 
15
void cc3_Wamef(void)
 
16
{
 
17
  dpdbuf4 F, D, W;
 
18
  dpdfile2 t1,tia,tIA;
 
19
 
 
20
  if(params.ref == 0) { /** RHF **/
 
21
 
 
22
    dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>");
 
23
    dpd_buf4_sort(&F, CC3_HET1, qpsr, 11, 5, "CC3 WAmEf (Am,Ef)");
 
24
    dpd_buf4_close(&F);
 
25
 
 
26
    dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WAmEf (Am,Ef)");
 
27
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
 
28
    dpd_file2_init(&t1, CC_OEI, 0, 0, 1, "tIA");
 
29
    dpd_contract244(&t1, &D, &W, 0, 0, 0, -1, 1);
 
30
    dpd_file2_close(&t1);
 
31
    dpd_buf4_close(&D);
 
32
    dpd_buf4_sort(&W, CC3_HET1, qprs, 10, 5, "CC3 WAmEf (mA,Ef)");
 
33
    dpd_buf4_close(&W);
 
34
  }
 
35
 
 
36
  else if (params.ref == 1) { /** ROHF **/
 
37
 
 
38
    /** W(AM,E>F) <--- <AM||EF> **/
 
39
    /** W(am,e>f) <--- <am||ef> **/
 
40
    dpd_buf4_init(&F, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>");
 
41
    dpd_buf4_copy(&F, CC3_HET1, "CC3 WAMEF (AM,E>F)");
 
42
    dpd_buf4_copy(&F, CC3_HET1, "CC3 Wamef (am,e>f)");
 
43
    dpd_buf4_close(&F);
 
44
 
 
45
    /** W(Am,Ef) <--- <Am|Ef> **/
 
46
    /** W(aM,eF) <--- <aM|eF> **/
 
47
    dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>");
 
48
    dpd_buf4_copy(&F, CC3_HET1, "CC3 WAmEf (Am,Ef)");
 
49
    dpd_buf4_copy(&F, CC3_HET1, "CC3 WaMeF (aM,eF)");
 
50
    dpd_buf4_close(&F);
 
51
 
 
52
    dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
 
53
    dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia");
 
54
 
 
55
    /* t(N,A) <NM||EF> --> W(AM,E>F) */
 
56
    dpd_buf4_init(&W, CC3_HET1, 0, 11, 7, 11, 7, 0, "CC3 WAMEF (AM,E>F)");
 
57
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)");
 
58
    dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1.0);
 
59
    dpd_buf4_close(&D);
 
60
    dpd_buf4_sort(&W, CC3_HET1, qprs, 10, 7, "CC3 WAMEF (MA,F>E)");
 
61
    dpd_buf4_close(&W);
 
62
    dpd_buf4_init(&W, CC3_HET1, 0, 10, 7, 10, 7, 0, "CC3 WAMEF (MA,F>E)");
 
63
    dpd_buf4_scm(&W, -1.0);
 
64
    dpd_buf4_close(&W);
 
65
 
 
66
    /* t(n,a) <nm||ef> --> W(am,e>f) */
 
67
    dpd_buf4_init(&W, CC3_HET1, 0, 11, 7, 11, 7, 0, "CC3 Wamef (am,e>f)");
 
68
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)");
 
69
    dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1.0);
 
70
    dpd_buf4_close(&D);
 
71
    dpd_buf4_sort(&W, CC3_HET1, qprs, 10, 7, "CC3 Wamef (ma,f>e)");
 
72
    dpd_buf4_close(&W);
 
73
    dpd_buf4_init(&W, CC3_HET1, 0, 10, 7, 10, 7, 0, "CC3 Wamef (ma,f>e)");
 
74
    dpd_buf4_scm(&W, -1.0);
 
75
    dpd_buf4_close(&W);
 
76
 
 
77
    /* t(N,A) <Nm|Ef> --> W(Am,Ef) */
 
78
    dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WAmEf (Am,Ef)");
 
79
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
 
80
    dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1.0);
 
81
    dpd_buf4_close(&D);
 
82
    dpd_buf4_sort(&W, CC3_HET1, qpsr, 10, 5, "CC3 WAmEf (mA,fE)");
 
83
    dpd_buf4_close(&W);
 
84
 
 
85
    /* t(n,a) <nM|eF> --> W(aM,eF) */
 
86
    dpd_buf4_init(&W, CC3_HET1, 0, 11, 5, 11, 5, 0, "CC3 WaMeF (aM,eF)");
 
87
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
 
88
    dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1.0);
 
89
    dpd_buf4_close(&D);
 
90
    dpd_buf4_sort(&W, CC3_HET1, qpsr, 10, 5, "CC3 WaMeF (Ma,Fe)");
 
91
    dpd_buf4_close(&W);
 
92
 
 
93
    dpd_file2_close(&tia);
 
94
    dpd_file2_close(&tIA);
 
95
 
 
96
    purge_Wamef();
 
97
  }
 
98
  
 
99
  else if (params.ref == 2) {
 
100
 
 
101
    dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia");
 
102
    dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
 
103
 
 
104
    /** W(AM,E>F) <--- <AM||EF> **/
 
105
    dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>");
 
106
    dpd_buf4_copy(&F, CC3_HET1, "CC3 WAMEF (AM,E>F)");
 
107
    dpd_buf4_close(&F);
 
108
 
 
109
    /** W(am,e>f) <--- <am||ef> **/
 
110
    dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>");
 
111
    dpd_buf4_copy(&F, CC3_HET1, "CC3 Wamef (am,e>f)");
 
112
    dpd_buf4_close(&F);
 
113
 
 
114
    /** W(Am,Ef) <--- <Am|Ef> **/
 
115
    dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>");
 
116
    dpd_buf4_copy(&F, CC3_HET1, "CC3 WAmEf (Am,Ef)");
 
117
    dpd_buf4_close(&F);
 
118
 
 
119
    /** W(aM,eF) <--- <aM|eF> **/
 
120
    dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>");
 
121
    dpd_buf4_copy(&F, CC3_HET1, "CC3 WaMeF (aM,eF)");
 
122
    dpd_buf4_close(&F);
 
123
 
 
124
    /** W(AM,E>F) <--- tNA * <NM||EF> **/
 
125
    dpd_buf4_init(&W, CC3_HET1, 0, 21, 7, 21, 7, 0, "CC3 WAMEF (AM,E>F)");
 
126
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)");
 
127
    dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1);
 
128
    dpd_buf4_close(&D);
 
129
    dpd_buf4_sort(&W, CC3_HET1, qprs, 20, 7, "CC3 WAMEF (MA,F>E)");
 
130
    dpd_buf4_close(&W);
 
131
    dpd_buf4_init(&W, CC3_HET1, 0, 20, 7, 20, 7, 0, "CC3 WAMEF (MA,F>E)");
 
132
    dpd_buf4_scm(&W, -1.0);
 
133
    dpd_buf4_close(&W);
 
134
 
 
135
    /** W(am,e>f) <--- tna * <nm||ef> **/
 
136
    dpd_buf4_init(&W, CC3_HET1, 0, 31, 17, 31, 17, 0, "CC3 Wamef (am,e>f)");
 
137
    dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)");
 
138
    dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1);
 
139
    dpd_buf4_close(&D);
 
140
    dpd_buf4_sort(&W, CC3_HET1, qprs, 30, 17, "CC3 Wamef (ma,f>e)");
 
141
    dpd_buf4_close(&W);
 
142
    dpd_buf4_init(&W, CC3_HET1, 0, 30, 17, 30, 17, 0, "CC3 Wamef (ma,f>e)");
 
143
    dpd_buf4_scm(&W, -1.0);
 
144
    dpd_buf4_close(&W);
 
145
 
 
146
    /** W(Am,Ef) <--- tNA * <Nm|Ef> **/
 
147
    dpd_buf4_init(&W, CC3_HET1, 0, 26, 28, 26, 28, 0, "CC3 WAmEf (Am,Ef)");
 
148
    dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>");
 
149
    dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1);
 
150
    dpd_buf4_close(&D);
 
151
    dpd_buf4_sort(&W, CC3_HET1, qpsr, 27, 29, "CC3 WAmEf (mA,fE)");
 
152
    dpd_buf4_close(&W);
 
153
 
 
154
    /** W(aM,eF) <--- tna * <nM|eF> **/
 
155
    dpd_buf4_init(&W, CC3_HET1, 0, 25, 29, 25, 29, 0, "CC3 WaMeF (aM,eF)");
 
156
    dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>");
 
157
    dpd_contract244(&tia, &D, &W, 0, 0, 0, -1, 1);
 
158
    dpd_buf4_close(&D);
 
159
    dpd_buf4_sort(&W, CC3_HET1, qpsr, 24, 28, "CC3 WaMeF (Ma,Fe)");
 
160
    dpd_buf4_close(&W);
 
161
 
 
162
    dpd_file2_close(&tia);
 
163
    dpd_file2_close(&tIA);
 
164
  }
 
165
}
 
166
 
 
167
void purge_Wamef(void) {
 
168
  dpdfile2 FAE, Fmi, FME, Fme;
 
169
  dpdfile4 W; 
 
170
  int *occpi, *virtpi;
 
171
  int h, a, b, e, f, i, j, m, n, omit;
 
172
  int    A, B, E, F, I, J, M, N;
 
173
  int mn, ei, ma, ef, me, jb, mb, ij, ab;
 
174
  int asym, bsym, esym, fsym, isym, jsym, msym, nsym;
 
175
  int *occ_off, *vir_off;
 
176
  int *occ_sym, *vir_sym;
 
177
  int *openpi, nirreps;
 
178
  
 
179
  nirreps = moinfo.nirreps;
 
180
  occpi = moinfo.occpi; virtpi = moinfo.virtpi;
 
181
  occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
 
182
  occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
 
183
  openpi = moinfo.openpi;
 
184
 
 
185
  /* Purge Wamef matrix elements */
 
186
  dpd_file4_init(&W, CC3_HET1, 0, 11, 7,"CC3 WAMEF (AM,E>F)");
 
187
  for(h=0; h < nirreps; h++) {
 
188
    dpd_file4_mat_irrep_init(&W, h);
 
189
    dpd_file4_mat_irrep_rd(&W, h);
 
190
    for(ma=0; ma < W.params->rowtot[h]; ma++) {
 
191
      a = W.params->roworb[h][ma][0];
 
192
      asym = W.params->psym[a];
 
193
      A = a - vir_off[asym];
 
194
      for(ef=0; ef< W.params->coltot[h]; ef++) {
 
195
        e = W.params->colorb[h][ef][0];
 
196
        f = W.params->colorb[h][ef][1];
 
197
        esym = W.params->rsym[e];
 
198
        fsym = W.params->ssym[f];
 
199
        E = e - vir_off[esym];
 
200
        F = f - vir_off[fsym];
 
201
        if ((A >= (virtpi[asym] - openpi[asym])) ||
 
202
            (E >= (virtpi[esym] - openpi[esym])) ||
 
203
            (F >= (virtpi[fsym] - openpi[fsym])) )
 
204
          W.matrix[h][ma][ef] = 0.0;
 
205
      }
 
206
    }
 
207
    dpd_file4_mat_irrep_wrt(&W, h);
 
208
    dpd_file4_mat_irrep_close(&W, h);
 
209
  }
 
210
  dpd_file4_close(&W);
 
211
 
 
212
  dpd_file4_init(&W, CC3_HET1, 0, 11, 7,"CC3 Wamef (am,e>f)");
 
213
  for(h=0; h < nirreps; h++) {
 
214
    dpd_file4_mat_irrep_init(&W, h);
 
215
    dpd_file4_mat_irrep_rd(&W, h);
 
216
    for(ma=0; ma < W.params->rowtot[h]; ma++) {
 
217
      m = W.params->roworb[h][ma][1];
 
218
      msym = W.params->qsym[m];
 
219
      M = m - occ_off[msym];
 
220
      for(ef=0; ef< W.params->coltot[h]; ef++) {
 
221
        if (M >=  (occpi[msym] - openpi[msym]))
 
222
          W.matrix[h][ma][ef] = 0.0;
 
223
      }
 
224
    }
 
225
    dpd_file4_mat_irrep_wrt(&W, h);
 
226
    dpd_file4_mat_irrep_close(&W, h);
 
227
  }
 
228
  dpd_file4_close(&W);
 
229
 
 
230
  dpd_file4_init(&W, CC3_HET1, 0, 11, 5,"CC3 WAmEf (Am,Ef)");
 
231
  for(h=0; h < nirreps; h++) {
 
232
    dpd_file4_mat_irrep_init(&W, h);
 
233
    dpd_file4_mat_irrep_rd(&W, h);
 
234
    for(ma=0; ma < W.params->rowtot[h]; ma++) {
 
235
      a = W.params->roworb[h][ma][0];
 
236
      m = W.params->roworb[h][ma][1];
 
237
      asym = W.params->psym[a];
 
238
      msym = W.params->qsym[m];
 
239
      M = m - occ_off[msym];
 
240
      A = a - vir_off[asym];
 
241
      for(ef=0; ef< W.params->coltot[h]; ef++) {
 
242
        e = W.params->colorb[h][ef][0];
 
243
        esym = W.params->rsym[e];
 
244
        E = e - vir_off[esym];
 
245
        if ((A >= (virtpi[asym] - openpi[asym])) ||
 
246
            (M >=  (occpi[msym] - openpi[msym])) ||
 
247
            (E >= (virtpi[esym] - openpi[esym])) )
 
248
          W.matrix[h][ma][ef] = 0.0;
 
249
      }
 
250
    }
 
251
    dpd_file4_mat_irrep_wrt(&W, h);
 
252
    dpd_file4_mat_irrep_close(&W, h);
 
253
  }
 
254
  dpd_file4_close(&W);
 
255
 
 
256
  dpd_file4_init(&W, CC3_HET1, 0, 11, 5,"CC3 WaMeF (aM,eF)");
 
257
  for(h=0; h < nirreps; h++) {
 
258
    dpd_file4_mat_irrep_init(&W, h);
 
259
    dpd_file4_mat_irrep_rd(&W, h);
 
260
    for(ma=0; ma < W.params->rowtot[h]; ma++) {
 
261
      for(ef=0; ef< W.params->coltot[h]; ef++) {
 
262
        f = W.params->colorb[h][ef][1];
 
263
        fsym = W.params->ssym[f];
 
264
        F = f - vir_off[fsym];
 
265
        if (F >= (virtpi[fsym] - openpi[fsym]))
 
266
          W.matrix[h][ma][ef] = 0.0;
 
267
      }
 
268
    }
 
269
    dpd_file4_mat_irrep_wrt(&W, h);
 
270
    dpd_file4_mat_irrep_close(&W, h);
 
271
  }
 
272
  dpd_file4_close(&W);
 
273
 
 
274
  return;
 
275
}