~ubuntu-branches/ubuntu/vivid/psicode/vivid

« back to all changes in this revision

Viewing changes to src/bin/cchbar/Wamef.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 CCHBAR
 
3
    \brief Enter brief description of file here 
 
4
*/
 
5
#include <cstdio>
 
6
#include <libdpd/dpd.h>
 
7
#include <libqt/qt.h>
 
8
#include "MOInfo.h"
 
9
#include "Params.h"
 
10
#define EXTERN
 
11
#include "globals.h"
 
12
 
 
13
namespace psi { namespace cchbar {
 
14
 
 
15
/* Wamef_build(): Computes all contributions to the Wamef HBAR matrix
 
16
** elements, whose spin-orbital definition is:
 
17
**
 
18
** Wamef = <am||ef> - t_n^a <nm||ef>
 
19
**
 
20
** (cf. Gauss and Stanton, JCP 103, 3561-3577 (1995).)
 
21
**
 
22
** The storage and naming convention for each spin case are 
 
23
** as follows:
 
24
**
 
25
** Spin Case     Storage      Name
 
26
** ----------    ---------    --------
 
27
** WAMEF         (MA,E>F)      "WAMEF"
 
28
** Wamef         (ma,e>f)      "Wamef"
 
29
** WAmEf         (mA,Ef)       "WAmEf"
 
30
** WaMeF         (Ma,eF)       "WaMeF"
 
31
** -----------------------------------
 
32
** TDC, June 2002
 
33
**
 
34
** RHF Cases:  Note that only the WAmEf spin case is required, and
 
35
** we store it AS WRITTEN, (Am,Ef).
 
36
** TDC, March 2004
 
37
**
 
38
** For all spin cases, we now use only the following
 
39
** WAMEF         (AM,E>F)      "WAMEF"
 
40
** Wamef         (am,e>f)      "Wamef"
 
41
** WAmEf         (Am,Ef)       "WAmEf"
 
42
** WaMeF         (aM,eF)       "WaMeF"
 
43
** RAK, April 2004
 
44
**
 
45
** For CC3, these are computed by ccenergy in file CC_HET1
 
46
** RAK, July 2006
 
47
*/
 
48
 
 
49
void Wamef_build(void) {
 
50
  dpdbuf4 Wamef, WAMEF, WAmEf, WaMeF, W;
 
51
  dpdbuf4 F, D;
 
52
  dpdfile2 tia, tIA;
 
53
  int h, Ga, Gn, Gm, A, a, row, nrows, ncols;
 
54
 
 
55
  if(params.ref == 0) { 
 
56
 
 
57
    dpd_buf4_init(&F, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>");
 
58
    dpd_buf4_sort(&F, CC_HBAR, qpsr, 11, 5, "WAmEf");
 
59
    dpd_buf4_close(&F);
 
60
 
 
61
    dpd_buf4_init(&W, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf");
 
62
    dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
 
63
    dpd_file2_mat_init(&tIA);
 
64
    dpd_file2_mat_rd(&tIA);
 
65
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
 
66
 
 
67
    /* dpd_contract244(&tIA, &D, &W, 0, 0, 0, -1, 1); */
 
68
    /** OOC code below added 05/04/05, -TDC **/
 
69
    for(h=0; h < moinfo.nirreps; h++) { /* h = Gam = Gnm = Gef */
 
70
 
 
71
      dpd_buf4_mat_irrep_init(&D, h);
 
72
      dpd_buf4_mat_irrep_rd(&D, h);
 
73
 
 
74
      row = 0;
 
75
      for(Ga=0; Ga < moinfo.nirreps; Ga++) {
 
76
        Gm = Ga ^ h;
 
77
        Gn = Ga; /* T1 is totally symmetric */
 
78
 
 
79
        W.matrix[h] = dpd_block_matrix(moinfo.occpi[Gm], W.params->coltot[h]);
 
80
 
 
81
        for(A=0; A < moinfo.virtpi[Ga]; A++) {
 
82
          a = moinfo.vir_off[Ga] + A;
 
83
 
 
84
          dpd_buf4_mat_irrep_rd_block(&W, h, W.row_offset[h][a], moinfo.occpi[Gm]);
 
85
 
 
86
          nrows = moinfo.occpi[Gn];
 
87
          ncols = moinfo.occpi[Gm] * W.params->coltot[h];
 
88
 
 
89
          if(nrows && ncols)
 
90
            C_DGEMV('t',nrows,ncols,-1.0,&(D.matrix[h][row][0]),ncols,&(tIA.matrix[Gn][0][A]),
 
91
                    moinfo.virtpi[Ga],1.0, W.matrix[h][0],1);
 
92
 
 
93
 
 
94
          dpd_buf4_mat_irrep_wrt_block(&W, h, W.row_offset[h][a], moinfo.occpi[Gm]);
 
95
        }
 
96
 
 
97
        row += moinfo.occpi[Gn] * moinfo.occpi[Gm];
 
98
 
 
99
        dpd_free_block(W.matrix[h], moinfo.occpi[Gm], W.params->coltot[h]);
 
100
      }
 
101
 
 
102
      dpd_buf4_mat_irrep_close(&D, h);
 
103
    }
 
104
 
 
105
    dpd_buf4_close(&D);
 
106
    dpd_file2_mat_close(&tIA);
 
107
    dpd_file2_close(&tIA);
 
108
    dpd_buf4_close(&W);
 
109
 
 
110
  }
 
111
  else if(params.ref == 1) { /** ROHF **/
 
112
 
 
113
    dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
 
114
    dpd_file2_init(&tia, CC_OEI, 0, 0, 1, "tia");
 
115
 
 
116
    /* <AM||EF> --> W(AM,E>F) */
 
117
    /* <am||ef> --> W(am,e>f) */
 
118
    dpd_buf4_init(&F, CC_FINTS, 0, 11, 7, 11, 5, 1, "F <ai|bc>");
 
119
    dpd_buf4_copy(&F, CC_HBAR, "WAMEF");
 
120
    dpd_buf4_copy(&F, CC_HBAR, "Wamef");
 
121
    dpd_buf4_close(&F);
 
122
 
 
123
    /* T(N,A) <NM||EF> --> W(AM,E>F) */
 
124
    dpd_buf4_init(&WAMEF, CC_HBAR, 0, 11, 7, 11, 7, 0, "WAMEF");
 
125
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)");
 
126
    dpd_contract244(&tIA, &D, &WAMEF, 0, 0, 0, -1, 1);
 
127
    dpd_buf4_close(&D);
 
128
    dpd_buf4_close(&WAMEF);  
 
129
 
 
130
    /* T(n,a) <nm||ef> --> W(am,e>f) */
 
131
    dpd_buf4_init(&Wamef, CC_HBAR, 0, 11, 7, 11, 7, 0, "Wamef");
 
132
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <ij||ab> (ij,a>b)");
 
133
    dpd_contract244(&tia, &D, &Wamef, 0, 0, 0, -1, 1);
 
134
    dpd_buf4_close(&D);
 
135
    dpd_buf4_close(&Wamef); 
 
136
 
 
137
    /* <Am|Ef> --> W(Am,Ef) */
 
138
    dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>");
 
139
    dpd_buf4_copy(&F, CC_HBAR, "WAmEf");
 
140
    dpd_buf4_close(&F);
 
141
 
 
142
    /* <aM|eF> --> W(aM,eF) */
 
143
    dpd_buf4_init(&F, CC_FINTS, 0, 11, 5, 11, 5, 0, "F <ai|bc>");
 
144
    dpd_buf4_copy(&F, CC_HBAR, "WaMeF");
 
145
    dpd_buf4_close(&F);
 
146
 
 
147
    /* T(N,A) <Nm|Ef> --> W(Am,Ef) */
 
148
    dpd_buf4_init(&WAmEf, CC_HBAR, 0, 11, 5, 11, 5, 0, "WAmEf");
 
149
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
 
150
    dpd_contract244(&tIA, &D, &WAmEf, 0, 0, 0, -1, 1);
 
151
    dpd_buf4_close(&D);
 
152
    dpd_buf4_close(&WAmEf);
 
153
 
 
154
    /* T(n,a) <nM|eF> --> W(aM,eF) */
 
155
    dpd_buf4_init(&WaMeF, CC_HBAR, 0, 11, 5, 11, 5, 0, "WaMeF");
 
156
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
 
157
    dpd_contract244(&tia, &D, &WaMeF, 0, 0, 0, -1, 1);
 
158
    dpd_buf4_close(&D);
 
159
    dpd_buf4_close(&WaMeF);
 
160
 
 
161
    dpd_file2_close(&tIA);
 
162
    dpd_file2_close(&tia);
 
163
 
 
164
  } /** ROHF **/
 
165
  else if(params.ref == 2) { /** UHF **/
 
166
 
 
167
    dpd_file2_init(&tIA, CC_OEI, 0, 0, 1, "tIA");
 
168
    dpd_file2_init(&tia, CC_OEI, 0, 2, 3, "tia");
 
169
 
 
170
    /* <AM||EF> --> W(AM,E>F) */
 
171
    dpd_buf4_init(&F, CC_FINTS, 0, 21, 7, 21, 5, 1, "F <AI|BC>");
 
172
    dpd_buf4_copy(&F, CC_HBAR, "WAMEF");
 
173
    dpd_buf4_close(&F);
 
174
 
 
175
    /* <am||ef> --> W(am,e>f) */
 
176
    dpd_buf4_init(&F, CC_FINTS, 0, 31, 17, 31, 15, 1, "F <ai|bc>");
 
177
    dpd_buf4_copy(&F, CC_HBAR, "Wamef");
 
178
    dpd_buf4_close(&F);
 
179
 
 
180
    /* T(N,A) <NM||EF> --> W(AM,E>F) */
 
181
    dpd_buf4_init(&WAMEF, CC_HBAR, 0, 21, 7, 21, 7, 0, "WAMEF");
 
182
    dpd_buf4_init(&D, CC_DINTS, 0, 0, 7, 0, 7, 0, "D <IJ||AB> (IJ,A>B)");
 
183
    dpd_contract244(&tIA, &D, &WAMEF, 0, 0, 0, -1, 1);
 
184
    dpd_buf4_close(&D);
 
185
    dpd_buf4_close(&WAMEF);  
 
186
 
 
187
    /* T(n,a) <nm||ef> --> W(am,e>f) */
 
188
    dpd_buf4_init(&Wamef, CC_HBAR, 0, 31, 17, 31, 17, 0, "Wamef");
 
189
    dpd_buf4_init(&D, CC_DINTS, 0, 10, 17, 10, 17, 0, "D <ij||ab> (ij,a>b)");
 
190
    dpd_contract244(&tia, &D, &Wamef, 0, 0, 0, -1, 1);
 
191
    dpd_buf4_close(&D);
 
192
    dpd_buf4_close(&Wamef); 
 
193
 
 
194
    /* <Am|Ef> --> W(Am,Ef) */
 
195
    dpd_buf4_init(&F, CC_FINTS, 0, 26, 28, 26, 28, 0, "F <Ai|Bc>");
 
196
    dpd_buf4_copy(&F, CC_HBAR, "WAmEf");
 
197
    dpd_buf4_close(&F);
 
198
 
 
199
    /* <aM|eF> --> W(aM,eF) */
 
200
    dpd_buf4_init(&F, CC_FINTS, 0, 25, 29, 25, 29, 0, "F <aI|bC>");
 
201
    dpd_buf4_copy(&F, CC_HBAR, "WaMeF");
 
202
    dpd_buf4_close(&F);
 
203
 
 
204
    /* T(N,A) <Nm|Ef> --> W(Am,Ef) */
 
205
    dpd_buf4_init(&WAmEf, CC_HBAR, 0, 26, 28, 26, 28, 0, "WAmEf");
 
206
    dpd_buf4_init(&D, CC_DINTS, 0, 22, 28, 22, 28, 0, "D <Ij|Ab>");
 
207
    dpd_contract244(&tIA, &D, &WAmEf, 0, 0, 0, -1, 1);
 
208
    dpd_buf4_close(&D);
 
209
    dpd_buf4_close(&WAmEf);
 
210
 
 
211
    /* T(n,a) <nM|eF> --> W(aM,eF) */
 
212
    dpd_buf4_init(&WaMeF, CC_HBAR, 0, 25, 29, 25, 29, 0, "WaMeF");
 
213
    dpd_buf4_init(&D, CC_DINTS, 0, 23, 29, 23, 29, 0, "D <iJ|aB>");
 
214
    dpd_contract244(&tia, &D, &WaMeF, 0, 0, 0, -1, 1);
 
215
    dpd_buf4_close(&D);
 
216
    dpd_buf4_close(&WaMeF);
 
217
 
 
218
    dpd_file2_close(&tIA);
 
219
    dpd_file2_close(&tia);
 
220
  } /** UHF **/
 
221
 
 
222
  return;
 
223
}
 
224
 
 
225
}} // namespace psi::cchbar