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

« back to all changes in this revision

Viewing changes to src/bin/ccdensity/fold_ROHF.c

  • 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
 
#include <stdio.h>
2
 
#include <libdpd/dpd.h>
3
 
#define EXTERN
4
 
#include "globals.h"
5
 
 
6
 
/* FOLD_ROHF(): Fold the ROHF Fock matrix contributions to the energy
7
 
** (or energy derivative) into the two-particle density matrix.  Here
8
 
** we are trying to convert from an energy expression of the form:
9
 
**
10
 
** E = sum_pq Dpq fpq + 1/4 sum_pqrs Gpqrs <pq||rs>
11
 
**
12
 
** to the form:
13
 
**
14
 
** E = sum_pq Dpq hpq + 1/4 sum_pqrs Gpqrs <pq||rs>
15
 
**
16
 
** We do this by shifting some one-particle density matrix components
17
 
** into appropriate two-particle density matrix components:
18
 
**
19
 
** G'pmrm = Dpr + 4 * Gpmrm
20
 
**
21
 
** One problem is that we need to make sure the resulting density,
22
 
** G'pqrs, is still antisymmetric to permutation of p and q or r and
23
 
** s.  So, for example, for the Gimkm component we compute:
24
 
**
25
 
** G'pmrm = Dpr + Gpmrm
26
 
** G'mprm = Dpr - Gmprm
27
 
** G'pmmr = Dpr - Gpmmr
28
 
** G'mpmr = Dpr + Gmpmr
29
 
** */
30
 
 
31
 
void fold_ROHF(struct RHO_Params rho_params)
32
 
{
33
 
  int h, nirreps;
34
 
  int i, j, k, l, m, a, b;
35
 
  int I, J, K, L, M, A, B;
36
 
  int IM, JM, MI, MJ, MK, ML, MA, MB;
37
 
  int Gi, Gj, Gk, Gl, Gm, Ga, Gb;
38
 
  int *occpi, *virtpi;
39
 
  int *occ_off, *vir_off;
40
 
  int *occ_sym, *vir_sym;
41
 
  int *openpi;
42
 
  dpdfile2 D, D1, D2, F;
43
 
  dpdbuf4 G, Aints, E, C, DInts, FInts, BInts, G1, G2;
44
 
  double one_energy=0.0, two_energy=0.0, total_two_energy=0.0;
45
 
  double test_energy = 0.0, tmp;
46
 
  double this_energy;
47
 
 
48
 
  nirreps = moinfo.nirreps;
49
 
  occpi = moinfo.occpi; virtpi = moinfo.virtpi;
50
 
  occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
51
 
  occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
52
 
  openpi = moinfo.openpi;
53
 
 
54
 
  if(!params.aobasis) {
55
 
    fprintf(outfile, "\n\tEnergies re-computed from Fock-adjusted CC density:\n");
56
 
    fprintf(outfile,   "\t---------------------------------------------------\n");
57
 
 
58
 
    dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl);
59
 
    dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)");
60
 
    this_energy = dpd_file2_dot(&D, &F);
61
 
    dpd_file2_close(&F);
62
 
    dpd_file2_close(&D);
63
 
 
64
 
    /*    fprintf(outfile, "\tDIJ = %20.15f\n", this_energy); */
65
 
    one_energy += this_energy;
66
 
 
67
 
    dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl);
68
 
    dpd_file2_init(&F, CC_OEI, 0, 0, 0, "h(i,j)");
69
 
    this_energy = dpd_file2_dot(&D, &F);
70
 
    dpd_file2_close(&F);
71
 
    dpd_file2_close(&D);
72
 
 
73
 
    /*    fprintf(outfile, "\tDij = %20.15f\n", this_energy); */
74
 
    one_energy += this_energy;
75
 
 
76
 
    dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl);
77
 
    dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)");
78
 
    this_energy = dpd_file2_dot(&D, &F);
79
 
    dpd_file2_close(&F);
80
 
    dpd_file2_close(&D);
81
 
 
82
 
    /*    fprintf(outfile, "\tDAB = %20.15f\n", this_energy); */
83
 
    one_energy += this_energy;
84
 
 
85
 
    dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl);
86
 
    dpd_file2_init(&F, CC_OEI, 0, 1, 1, "h(a,b)");
87
 
    this_energy = dpd_file2_dot(&D, &F);
88
 
    dpd_file2_close(&F);
89
 
    dpd_file2_close(&D);
90
 
 
91
 
    /*    fprintf(outfile, "\tDab = %20.15f\n", this_energy); */
92
 
    one_energy += this_energy;
93
 
 
94
 
    dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DIA_lbl);
95
 
    dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)");
96
 
    this_energy = dpd_file2_dot(&D, &F);
97
 
    dpd_file2_close(&F);
98
 
    dpd_file2_close(&D);
99
 
 
100
 
    /*    fprintf(outfile, "\tDIA = %20.15f\n", this_energy); */
101
 
    one_energy += this_energy;
102
 
 
103
 
    dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dia_lbl);
104
 
    dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)");
105
 
    this_energy = dpd_file2_dot(&D, &F);
106
 
    dpd_file2_close(&F);
107
 
    dpd_file2_close(&D);
108
 
 
109
 
    /*    fprintf(outfile, "\tDia = %20.15f\n", this_energy); */
110
 
    one_energy += this_energy;
111
 
 
112
 
    dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.DAI_lbl);
113
 
    dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)");
114
 
    this_energy = dpd_file2_dot(&D, &F);
115
 
    dpd_file2_close(&F);
116
 
    dpd_file2_close(&D);
117
 
 
118
 
    /*    fprintf(outfile, "\tDAI = %20.15f\n", this_energy); */
119
 
    one_energy += this_energy;
120
 
 
121
 
    dpd_file2_init(&D, CC_OEI, 0, 0, 1, rho_params.Dai_lbl);
122
 
    dpd_file2_init(&F, CC_OEI, 0, 0, 1, "h(i,a)");
123
 
    this_energy = dpd_file2_dot(&D, &F);
124
 
    dpd_file2_close(&F);
125
 
    dpd_file2_close(&D);
126
 
 
127
 
    /*    fprintf(outfile, "\tDai = %20.15f\n", this_energy); */
128
 
    one_energy += this_energy;
129
 
 
130
 
    fprintf(outfile, "\tOne-electron energy        = %20.15f\n", one_energy);
131
 
    fflush(outfile);
132
 
  }
133
 
 
134
 
  dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl);
135
 
  dpd_file2_mat_init(&D);
136
 
  dpd_file2_mat_rd(&D);
137
 
 
138
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 2, 2, 0, "GIJKL");
139
 
  for(h=0; h < nirreps; h++) {
140
 
    dpd_buf4_mat_irrep_init(&G, h);
141
 
    dpd_buf4_mat_irrep_rd(&G, h);
142
 
 
143
 
    for(Gm=0; Gm < nirreps; Gm++) {
144
 
      Gi = Gj = h^Gm;
145
 
 
146
 
      for(i=0; i < occpi[Gi]; i++) {
147
 
        I = occ_off[Gi] + i;
148
 
        for(j=0; j < occpi[Gj]; j++) {
149
 
          J = occ_off[Gj] + j;
150
 
          for(m=0; m < occpi[Gm]; m++) {
151
 
            M = occ_off[Gm] + m;
152
 
 
153
 
            IM = G.params->rowidx[I][M];
154
 
            JM = G.params->colidx[J][M];
155
 
            MI = G.params->rowidx[M][I];
156
 
            MJ = G.params->colidx[M][J];
157
 
 
158
 
            G.matrix[h][IM][JM] += D.matrix[Gi][i][j];
159
 
            G.matrix[h][IM][MJ] -= D.matrix[Gi][i][j];
160
 
            G.matrix[h][MI][MJ] += D.matrix[Gi][i][j];
161
 
            G.matrix[h][MI][JM] -= D.matrix[Gi][i][j];
162
 
          }
163
 
        }
164
 
      }
165
 
    }
166
 
 
167
 
    dpd_buf4_mat_irrep_wrt(&G, h);
168
 
    dpd_buf4_mat_irrep_close(&G, h);
169
 
  }
170
 
      
171
 
  if(!params.aobasis) {
172
 
    two_energy = 0.0;
173
 
    dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>");
174
 
    two_energy += 0.25 * dpd_buf4_dot(&Aints, &G);
175
 
    dpd_buf4_close(&Aints);
176
 
  }
177
 
 
178
 
  dpd_buf4_close(&G);
179
 
 
180
 
  dpd_file2_mat_close(&D);
181
 
  dpd_file2_close(&D);
182
 
 
183
 
  dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl);
184
 
  dpd_file2_mat_init(&D);
185
 
  dpd_file2_mat_rd(&D);
186
 
 
187
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 2, 2, 0, "Gijkl");
188
 
  for(h=0; h < nirreps; h++) {
189
 
    dpd_buf4_mat_irrep_init(&G, h);
190
 
    dpd_buf4_mat_irrep_rd(&G, h);
191
 
 
192
 
    for(Gm=0; Gm < nirreps; Gm++) {
193
 
      Gi = Gj = h^Gm;
194
 
 
195
 
      for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) {
196
 
        I = occ_off[Gi] + i;
197
 
        for(j=0; j < (occpi[Gj] - openpi[Gj]); j++) {
198
 
          J = occ_off[Gj] + j;
199
 
          for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) {
200
 
            M = occ_off[Gm] + m;
201
 
 
202
 
            IM = G.params->rowidx[I][M];
203
 
            JM = G.params->colidx[J][M];
204
 
            MI = G.params->rowidx[M][I];
205
 
            MJ = G.params->colidx[M][J];
206
 
 
207
 
            G.matrix[h][IM][JM] += D.matrix[Gi][i][j];
208
 
            G.matrix[h][MI][JM] -= D.matrix[Gi][i][j];
209
 
            G.matrix[h][MI][MJ] += D.matrix[Gi][i][j];
210
 
            G.matrix[h][IM][MJ] -= D.matrix[Gi][i][j];
211
 
          }
212
 
        }
213
 
      }
214
 
    }
215
 
 
216
 
    dpd_buf4_mat_irrep_wrt(&G, h);
217
 
    dpd_buf4_mat_irrep_close(&G, h);
218
 
  }
219
 
 
220
 
  if(!params.aobasis) {
221
 
    dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 1, "A <ij|kl>");
222
 
    two_energy += 0.25 * dpd_buf4_dot(&Aints, &G);
223
 
    dpd_buf4_close(&Aints);
224
 
  }
225
 
 
226
 
  dpd_buf4_close(&G);
227
 
 
228
 
  dpd_file2_mat_close(&D);
229
 
  dpd_file2_close(&D);
230
 
 
231
 
  dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.DIJ_lbl);
232
 
  dpd_file2_mat_init(&D);
233
 
  dpd_file2_mat_rd(&D);
234
 
 
235
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl");
236
 
  for(h=0; h < nirreps; h++) {
237
 
    dpd_buf4_mat_irrep_init(&G, h);
238
 
    dpd_buf4_mat_irrep_rd(&G, h);
239
 
 
240
 
    for(Gm=0; Gm < nirreps; Gm++) {
241
 
      Gi = Gj = h^Gm;
242
 
 
243
 
      for(i=0; i < occpi[Gi]; i++) {
244
 
        I = occ_off[Gi] + i;
245
 
        for(j=0; j < occpi[Gj]; j++) {
246
 
          J = occ_off[Gj] + j;
247
 
          for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) {
248
 
            M = occ_off[Gm] + m;
249
 
 
250
 
            IM = G.params->rowidx[I][M];
251
 
            JM = G.params->colidx[J][M];
252
 
 
253
 
            G.matrix[h][IM][JM] += D.matrix[Gi][i][j];
254
 
          }
255
 
        }
256
 
      }
257
 
    }
258
 
 
259
 
    dpd_buf4_mat_irrep_wrt(&G, h); 
260
 
    dpd_buf4_mat_irrep_close(&G, h);
261
 
  }
262
 
  dpd_buf4_close(&G);
263
 
 
264
 
  dpd_file2_mat_close(&D);
265
 
  dpd_file2_close(&D);
266
 
 
267
 
 
268
 
  dpd_file2_init(&D, CC_OEI, 0, 0, 0, rho_params.Dij_lbl);
269
 
  dpd_file2_mat_init(&D);
270
 
  dpd_file2_mat_rd(&D);
271
 
 
272
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 0, 0, 0, 0, 0, "GIjKl");
273
 
  for(h=0; h < nirreps; h++) {
274
 
    dpd_buf4_mat_irrep_init(&G, h);
275
 
    dpd_buf4_mat_irrep_rd(&G, h);
276
 
 
277
 
    for(Gm=0; Gm < nirreps; Gm++) {
278
 
      Gk = Gl = h^Gm;
279
 
 
280
 
      for(k=0; k < (occpi[Gk] - openpi[Gk]); k++) {
281
 
        K = occ_off[Gk] + k;
282
 
        for(l=0; l < (occpi[Gl] - openpi[Gl]); l++) {
283
 
          L = occ_off[Gl] + l;
284
 
          for(m=0; m < occpi[Gm]; m++) {
285
 
            M = occ_off[Gm] + m;
286
 
 
287
 
            MK = G.params->rowidx[M][K];
288
 
            ML = G.params->colidx[M][L];
289
 
 
290
 
            G.matrix[h][MK][ML] += D.matrix[Gk][k][l];
291
 
          }
292
 
        }
293
 
      }
294
 
    }
295
 
 
296
 
    dpd_buf4_mat_irrep_wrt(&G, h);
297
 
    dpd_buf4_mat_irrep_close(&G, h);
298
 
  }
299
 
 
300
 
  if(!params.aobasis) {
301
 
    dpd_buf4_init(&Aints, CC_AINTS, 0, 0, 0, 0, 0, 0, "A <ij|kl>");
302
 
    two_energy += dpd_buf4_dot(&Aints, &G);
303
 
    dpd_buf4_close(&Aints);
304
 
  }
305
 
 
306
 
  dpd_buf4_close(&G);
307
 
 
308
 
  if(!params.aobasis) {
309
 
    total_two_energy += two_energy;
310
 
    fprintf(outfile, "\tIJKL energy                = %20.15f\n", two_energy);
311
 
    fflush(outfile);
312
 
  }
313
 
 
314
 
  dpd_file2_mat_close(&D);
315
 
  dpd_file2_close(&D);
316
 
 
317
 
  dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl);
318
 
  dpd_file2_mat_init(&D1);
319
 
  dpd_file2_mat_rd(&D1);
320
 
  dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.DAI_lbl);
321
 
  dpd_file2_mat_init(&D2);
322
 
  dpd_file2_mat_rd(&D2);
323
 
 
324
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "GIJKA");
325
 
  for(h=0; h < nirreps; h++) {
326
 
    dpd_buf4_mat_irrep_init(&G, h);
327
 
    dpd_buf4_mat_irrep_rd(&G, h);
328
 
 
329
 
    for(Gm=0; Gm < nirreps; Gm++) {
330
 
      Gi = Ga = h^Gm;
331
 
 
332
 
      for(i=0; i < occpi[Gi]; i++) {
333
 
        I = occ_off[Gi] + i;
334
 
        for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) {
335
 
          A = vir_off[Ga] + a;
336
 
          for(m=0; m < occpi[Gm]; m++) {
337
 
            M = occ_off[Gm] + m;
338
 
 
339
 
            MI = G.params->rowidx[M][I];
340
 
            IM = G.params->rowidx[I][M];
341
 
            MA = G.params->colidx[M][A];
342
 
 
343
 
            G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] +
344
 
                                          D2.matrix[Gi][i][a]);
345
 
            G.matrix[h][IM][MA] -= 0.5 * (D1.matrix[Gi][i][a] +
346
 
                                          D2.matrix[Gi][i][a]);
347
 
          }
348
 
        }
349
 
      }
350
 
    }
351
 
 
352
 
    dpd_buf4_mat_irrep_wrt(&G, h);
353
 
    dpd_buf4_mat_irrep_close(&G, h);
354
 
  }
355
 
 
356
 
  if(!params.aobasis) {
357
 
    two_energy = 0.0;
358
 
    dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)");
359
 
    two_energy += dpd_buf4_dot(&E, &G);
360
 
    dpd_buf4_close(&E);
361
 
  }
362
 
 
363
 
  dpd_buf4_close(&G);
364
 
 
365
 
  dpd_file2_mat_close(&D1);
366
 
  dpd_file2_close(&D1);
367
 
  dpd_file2_mat_close(&D2);
368
 
  dpd_file2_close(&D2);
369
 
 
370
 
  dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.Dia_lbl);
371
 
  dpd_file2_mat_init(&D1);
372
 
  dpd_file2_mat_rd(&D1);
373
 
  dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.Dai_lbl);
374
 
  dpd_file2_mat_init(&D2);
375
 
  dpd_file2_mat_rd(&D2);
376
 
 
377
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 2, 10, 0, "Gijka");
378
 
  for(h=0; h < nirreps; h++) {
379
 
    dpd_buf4_mat_irrep_init(&G, h);
380
 
    dpd_buf4_mat_irrep_rd(&G, h);
381
 
 
382
 
    for(Gm=0; Gm < nirreps; Gm++) {
383
 
      Gi = Ga = h^Gm;
384
 
 
385
 
      for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) {
386
 
        I = occ_off[Gi] + i;
387
 
        for(a=0; a < virtpi[Ga]; a++) {
388
 
          A = vir_off[Ga] + a;
389
 
          for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) {
390
 
            M = occ_off[Gm] + m;
391
 
 
392
 
            MI = G.params->rowidx[M][I];
393
 
            IM = G.params->rowidx[I][M];
394
 
            MA = G.params->colidx[M][A];
395
 
 
396
 
            G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] +
397
 
                                          D2.matrix[Gi][i][a]);
398
 
            G.matrix[h][IM][MA] -= 0.5 * (D1.matrix[Gi][i][a] +
399
 
                                          D2.matrix[Gi][i][a]);
400
 
          }
401
 
        }
402
 
      }
403
 
    }
404
 
 
405
 
    dpd_buf4_mat_irrep_wrt(&G, h);
406
 
    dpd_buf4_mat_irrep_close(&G, h);
407
 
  }
408
 
  if(!params.aobasis) {
409
 
    dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 2, 10, 0, "E <ij||ka> (i>j,ka)");
410
 
    two_energy += dpd_buf4_dot(&E, &G);
411
 
    dpd_buf4_close(&E);
412
 
  }
413
 
 
414
 
  dpd_buf4_close(&G);
415
 
 
416
 
  dpd_file2_mat_close(&D1);
417
 
  dpd_file2_close(&D1);
418
 
  dpd_file2_mat_close(&D2);
419
 
  dpd_file2_close(&D2);
420
 
 
421
 
  dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.DIA_lbl);
422
 
  dpd_file2_mat_init(&D1);
423
 
  dpd_file2_mat_rd(&D1);
424
 
  dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.DAI_lbl);
425
 
  dpd_file2_mat_init(&D2);
426
 
  dpd_file2_mat_rd(&D2);
427
 
 
428
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GiJkA");
429
 
  for(h=0; h < nirreps; h++) {
430
 
    dpd_buf4_mat_irrep_init(&G, h);
431
 
    dpd_buf4_mat_irrep_rd(&G, h);
432
 
 
433
 
    for(Gm=0; Gm < nirreps; Gm++) {
434
 
      Gi = Ga = h^Gm;
435
 
 
436
 
      for(i=0; i < occpi[Gi]; i++) {
437
 
        I = occ_off[Gi] + i;
438
 
        for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) {
439
 
          A = vir_off[Ga] + a;
440
 
          for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) {
441
 
            M = occ_off[Gm] + m;
442
 
 
443
 
            MI = G.params->rowidx[M][I];
444
 
            MA = G.params->colidx[M][A];
445
 
 
446
 
            G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] +
447
 
                                          D2.matrix[Gi][i][a]);
448
 
          }
449
 
        }
450
 
      }
451
 
    }
452
 
 
453
 
    dpd_buf4_mat_irrep_wrt(&G, h);
454
 
    dpd_buf4_mat_irrep_close(&G, h);
455
 
  }
456
 
 
457
 
  if(!params.aobasis) {
458
 
    dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>");
459
 
    two_energy += 2 * dpd_buf4_dot(&E, &G);
460
 
    dpd_buf4_close(&E);
461
 
  }
462
 
 
463
 
  dpd_buf4_close(&G);
464
 
 
465
 
  dpd_file2_mat_close(&D1);
466
 
  dpd_file2_close(&D1);
467
 
  dpd_file2_mat_close(&D2);
468
 
  dpd_file2_close(&D2);
469
 
 
470
 
 
471
 
  dpd_file2_init(&D1, CC_OEI, 0, 0, 1, rho_params.Dia_lbl);
472
 
  dpd_file2_mat_init(&D1);
473
 
  dpd_file2_mat_rd(&D1);
474
 
  dpd_file2_init(&D2, CC_OEI, 0, 0, 1, rho_params.Dai_lbl);
475
 
  dpd_file2_mat_init(&D2);
476
 
  dpd_file2_mat_rd(&D2);
477
 
 
478
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 0, 10, 0, 10, 0, "GIjKa");
479
 
  for(h=0; h < nirreps; h++) {
480
 
    dpd_buf4_mat_irrep_init(&G, h);
481
 
    dpd_buf4_mat_irrep_rd(&G, h);
482
 
 
483
 
    for(Gm=0; Gm < nirreps; Gm++) {
484
 
      Gi = Ga = h^Gm;
485
 
 
486
 
      for(i=0; i < (occpi[Gi] - openpi[Gi]); i++) {
487
 
        I = occ_off[Gi] + i;
488
 
        for(a=0; a < virtpi[Ga]; a++) {
489
 
          A = vir_off[Ga] + a;
490
 
          for(m=0; m < occpi[Gm]; m++) {
491
 
            M = occ_off[Gm] + m;
492
 
 
493
 
            MI = G.params->rowidx[M][I];
494
 
            MA = G.params->colidx[M][A];
495
 
 
496
 
            G.matrix[h][MI][MA] += 0.5 * (D1.matrix[Gi][i][a] +
497
 
                                          D2.matrix[Gi][i][a]);
498
 
          }
499
 
        }
500
 
      }
501
 
    }
502
 
 
503
 
    dpd_buf4_mat_irrep_wrt(&G, h);
504
 
    dpd_buf4_mat_irrep_close(&G, h);
505
 
  }
506
 
 
507
 
  if(!params.aobasis) {
508
 
    dpd_buf4_init(&E, CC_EINTS, 0, 0, 10, 0, 10, 0, "E <ij|ka>");
509
 
    two_energy += 2 * dpd_buf4_dot(&E, &G);
510
 
    dpd_buf4_close(&E);
511
 
  }
512
 
 
513
 
  dpd_buf4_close(&G);
514
 
 
515
 
  if(!params.aobasis) {
516
 
    total_two_energy += two_energy;
517
 
    fprintf(outfile, "\tIJKA energy                = %20.15f\n", two_energy);
518
 
    fflush(outfile);
519
 
  }
520
 
 
521
 
  dpd_file2_mat_close(&D1);
522
 
  dpd_file2_close(&D1);
523
 
  dpd_file2_mat_close(&D2);
524
 
  dpd_file2_close(&D2);
525
 
 
526
 
  if(!params.aobasis) {
527
 
    two_energy = 0.0;
528
 
    dpd_buf4_init(&DInts, CC_DINTS, 0, 2, 7, 2, 7, 0, "D <ij||ab> (i>j,a>b)");
529
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "GIJAB");
530
 
    two_energy += dpd_buf4_dot(&G, &DInts);
531
 
    dpd_buf4_close(&G);
532
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 2, 7, 2, 7, 0, "Gijab");
533
 
    two_energy += dpd_buf4_dot(&G, &DInts); 
534
 
    dpd_buf4_close(&G);
535
 
    dpd_buf4_close(&DInts);
536
 
    dpd_buf4_init(&DInts, CC_DINTS, 0, 0, 5, 0, 5, 0, "D <ij|ab>");
537
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 0, 5, 0, 5, 0, "GIjAb");
538
 
    two_energy += dpd_buf4_dot(&G, &DInts);
539
 
    dpd_buf4_close(&G);
540
 
    dpd_buf4_close(&DInts);
541
 
 
542
 
    two_energy *= 2;
543
 
    total_two_energy += two_energy;
544
 
    fprintf(outfile, "\tIJAB energy                = %20.15f\n", two_energy);
545
 
    fflush(outfile);
546
 
  }
547
 
 
548
 
  dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl);
549
 
  dpd_file2_mat_init(&D);
550
 
  dpd_file2_mat_rd(&D);
551
 
 
552
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIBJA");
553
 
  for(h=0; h < nirreps; h++) {
554
 
    dpd_buf4_mat_irrep_init(&G, h);
555
 
    dpd_buf4_mat_irrep_rd(&G, h);
556
 
 
557
 
    for(Gm=0; Gm < nirreps; Gm++) {
558
 
      Ga = Gb = h^Gm;
559
 
 
560
 
      for(b=0; b < (virtpi[Gb] - openpi[Gb]); b++) {
561
 
        B = vir_off[Gb] + b;
562
 
        for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) {
563
 
          A = vir_off[Ga] + a;
564
 
          for(m=0; m < occpi[Gm]; m++) {
565
 
            M = occ_off[Gm] + m;
566
 
 
567
 
            MB = G.params->rowidx[M][B];
568
 
            MA = G.params->colidx[M][A];
569
 
 
570
 
            G.matrix[h][MB][MA] += D.matrix[Ga][a][b];
571
 
          }
572
 
        }
573
 
      }
574
 
    }
575
 
 
576
 
    dpd_buf4_mat_irrep_wrt(&G, h);
577
 
    dpd_buf4_mat_irrep_close(&G, h);
578
 
  }
579
 
 
580
 
  if(!params.aobasis) {
581
 
    two_energy = 0.0;
582
 
    dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>");
583
 
    two_energy += dpd_buf4_dot(&C, &G);
584
 
    dpd_buf4_close(&C);
585
 
  }
586
 
 
587
 
  dpd_buf4_close(&G);
588
 
 
589
 
  dpd_file2_mat_close(&D);
590
 
  dpd_file2_close(&D);
591
 
 
592
 
 
593
 
  dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl);
594
 
  dpd_file2_mat_init(&D);
595
 
  dpd_file2_mat_rd(&D);
596
 
 
597
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "Gibja");
598
 
  for(h=0; h < nirreps; h++) {
599
 
    dpd_buf4_mat_irrep_init(&G, h);
600
 
    dpd_buf4_mat_irrep_rd(&G, h);
601
 
 
602
 
    for(Gm=0; Gm < nirreps; Gm++) {
603
 
      Ga = Gb = h^Gm;
604
 
 
605
 
      for(b=0; b < virtpi[Gb]; b++) {
606
 
        B = vir_off[Gb] + b;
607
 
        for(a=0; a < virtpi[Ga]; a++) {
608
 
          A = vir_off[Ga] + a;
609
 
          for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) {
610
 
            M = occ_off[Gm] + m;
611
 
 
612
 
            MB = G.params->rowidx[M][B];
613
 
            MA = G.params->colidx[M][A];
614
 
 
615
 
            G.matrix[h][MB][MA] += D.matrix[Ga][a][b];
616
 
          }
617
 
        }
618
 
      }
619
 
    }
620
 
 
621
 
    dpd_buf4_mat_irrep_wrt(&G, h);
622
 
    dpd_buf4_mat_irrep_close(&G, h);
623
 
  }
624
 
 
625
 
  if(!params.aobasis) {
626
 
    dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia||jb>");
627
 
    two_energy += dpd_buf4_dot(&C, &G);
628
 
    dpd_buf4_close(&C);
629
 
  }
630
 
 
631
 
  dpd_buf4_close(&G);
632
 
 
633
 
  dpd_file2_mat_close(&D);
634
 
  dpd_file2_close(&D);
635
 
 
636
 
 
637
 
  dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.Dab_lbl);
638
 
  dpd_file2_mat_init(&D);
639
 
  dpd_file2_mat_rd(&D);
640
 
 
641
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbJa");
642
 
  for(h=0; h < nirreps; h++) {
643
 
    dpd_buf4_mat_irrep_init(&G, h);
644
 
    dpd_buf4_mat_irrep_rd(&G, h);
645
 
 
646
 
    for(Gm=0; Gm < nirreps; Gm++) {
647
 
      Ga = Gb = h^Gm;
648
 
 
649
 
      for(b=0; b < virtpi[Gb]; b++) {
650
 
        B = vir_off[Gb] + b;
651
 
        for(a=0; a < virtpi[Ga]; a++) {
652
 
          A = vir_off[Ga] + a;
653
 
          for(m=0; m < occpi[Gm]; m++) {
654
 
            M = occ_off[Gm] + m;
655
 
 
656
 
            MB = G.params->rowidx[M][B];
657
 
            MA = G.params->colidx[M][A];
658
 
 
659
 
            G.matrix[h][MB][MA] += D.matrix[Ga][a][b];
660
 
          }
661
 
        }
662
 
      }
663
 
    }
664
 
 
665
 
    dpd_buf4_mat_irrep_wrt(&G, h);
666
 
    dpd_buf4_mat_irrep_close(&G, h);
667
 
  }
668
 
 
669
 
  if(!params.aobasis) {
670
 
    dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>");
671
 
    two_energy += dpd_buf4_dot(&C, &G);
672
 
    dpd_buf4_close(&C);
673
 
  }
674
 
 
675
 
  dpd_buf4_close(&G);
676
 
 
677
 
  dpd_file2_mat_close(&D);
678
 
  dpd_file2_close(&D);
679
 
 
680
 
 
681
 
  dpd_file2_init(&D, CC_OEI, 0, 1, 1, rho_params.DAB_lbl);
682
 
  dpd_file2_mat_init(&D);
683
 
  dpd_file2_mat_rd(&D);
684
 
 
685
 
  dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBjA");
686
 
  for(h=0; h < nirreps; h++) {
687
 
    dpd_buf4_mat_irrep_init(&G, h);
688
 
    dpd_buf4_mat_irrep_rd(&G, h);
689
 
 
690
 
    for(Gm=0; Gm < nirreps; Gm++) {
691
 
      Ga = Gb = h^Gm;
692
 
 
693
 
      for(b=0; b < (virtpi[Gb] - openpi[Gb]); b++) {
694
 
        B = vir_off[Gb] + b;
695
 
        for(a=0; a < (virtpi[Ga] - openpi[Ga]); a++) {
696
 
          A = vir_off[Ga] + a;
697
 
          for(m=0; m < (occpi[Gm] - openpi[Gm]); m++) {
698
 
            M = occ_off[Gm] + m;
699
 
 
700
 
            MB = G.params->rowidx[M][B];
701
 
            MA = G.params->colidx[M][A];
702
 
 
703
 
            G.matrix[h][MB][MA] += D.matrix[Ga][a][b];
704
 
          }
705
 
        }
706
 
      }
707
 
    }
708
 
    dpd_buf4_mat_irrep_wrt(&G, h);
709
 
    dpd_buf4_mat_irrep_close(&G, h);
710
 
  }
711
 
 
712
 
  if(!params.aobasis) {
713
 
    dpd_buf4_init(&C, CC_CINTS, 0, 10, 10, 10, 10, 0, "C <ia|jb>");
714
 
    two_energy += dpd_buf4_dot(&C, &G); 
715
 
    dpd_buf4_close(&C);
716
 
  }
717
 
 
718
 
  dpd_buf4_close(&G);
719
 
 
720
 
  dpd_file2_mat_close(&D);
721
 
  dpd_file2_close(&D);
722
 
 
723
 
 
724
 
  if(!params.aobasis) {
725
 
    dpd_buf4_init(&DInts, CC_DINTS, 0, 10, 10, 10, 10, 0, "D <ij|ab> (ib,ja)");
726
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GIbjA");
727
 
    two_energy -= dpd_buf4_dot(&G, &DInts);
728
 
    dpd_buf4_close(&G);
729
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 10, 10, 10, 10, 0, "GiBJa");
730
 
    two_energy -= dpd_buf4_dot(&G, &DInts);
731
 
    dpd_buf4_close(&G);
732
 
    dpd_buf4_close(&DInts);
733
 
 
734
 
    total_two_energy += two_energy;
735
 
    fprintf(outfile, "\tIBJA energy                = %20.15f\n", two_energy);
736
 
    fflush(outfile);
737
 
  }
738
 
 
739
 
  if(!params.aobasis) {
740
 
    two_energy = 0.0;
741
 
    dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 7, 10, 5, 1, "F <ia|bc>");
742
 
    dpd_buf4_sort(&FInts, CC_TMP0, qprs, 11, 7, "F(CI,AB)");
743
 
    dpd_buf4_close(&FInts);
744
 
    dpd_buf4_init(&FInts, CC_TMP0, 0, 11, 7, 11, 7, 0, "F(CI,AB)");
745
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "GCIAB");
746
 
    two_energy = -1.0 * dpd_buf4_dot(&G, &FInts);
747
 
    dpd_buf4_close(&G);
748
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 11, 7, 11, 7, 0, "Gciab");
749
 
    two_energy -= dpd_buf4_dot(&G, &FInts); 
750
 
    dpd_buf4_close(&G);
751
 
    dpd_buf4_close(&FInts);
752
 
    dpd_buf4_init(&FInts, CC_FINTS, 0, 10, 5, 10, 5, 0, "F <ia|bc>");
753
 
    dpd_buf4_sort(&FInts, CC_TMP0, qprs, 11, 5, "F(cI,Ba)");
754
 
    dpd_buf4_close(&FInts);
755
 
    dpd_buf4_init(&FInts, CC_TMP0, 0, 11, 5, 11, 5, 0, "F(cI,Ba)");
756
 
    dpd_buf4_sort(&FInts, CC_TMP1, pqsr, 11, 5, "F(cI,aB)");
757
 
    dpd_buf4_close(&FInts);
758
 
    dpd_buf4_init(&FInts, CC_TMP1, 0, 11, 5, 11, 5, 0, "F(cI,aB)");
759
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GcIaB");
760
 
    two_energy += dpd_buf4_dot(&G, &FInts);
761
 
    dpd_buf4_close(&G);
762
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 11, 5, 11, 5, 0, "GCiAb");
763
 
    two_energy += dpd_buf4_dot(&G, &FInts); 
764
 
    dpd_buf4_close(&G);
765
 
    dpd_buf4_close(&FInts);
766
 
 
767
 
    two_energy *= 2;
768
 
    total_two_energy += two_energy;
769
 
    fprintf(outfile, "\tCIAB energy                = %20.15f\n", two_energy);
770
 
    fflush(outfile);
771
 
  }
772
 
 
773
 
  if(!params.aobasis) {
774
 
    two_energy = 0.0;
775
 
    dpd_buf4_init(&BInts, CC_BINTS, 0, 7, 7, 5, 5, 1, "B <ab|cd>");
776
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "GABCD");
777
 
    two_energy += dpd_buf4_dot(&G, &BInts);
778
 
    dpd_buf4_close(&G);
779
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 7, 7, 7, 7, 0, "Gabcd");
780
 
    two_energy += dpd_buf4_dot(&G, &BInts);
781
 
    dpd_buf4_close(&G);
782
 
    dpd_buf4_close(&BInts);
783
 
    dpd_buf4_init(&BInts, CC_BINTS, 0, 5, 5, 5, 5, 0, "B <ab|cd>");
784
 
    dpd_buf4_init(&G, CC_GAMMA, 0, 5, 5, 5, 5, 0, "GAbCd");
785
 
    two_energy += dpd_buf4_dot(&G, &BInts);
786
 
    dpd_buf4_close(&G);
787
 
    dpd_buf4_close(&BInts);
788
 
  }
789
 
 
790
 
  if(!params.aobasis) {
791
 
    total_two_energy += two_energy;
792
 
    fprintf(outfile, "\tABCD energy                = %20.15f\n", two_energy);
793
 
    fprintf(outfile, "\tTotal two-electron energy  = %20.15f\n", total_two_energy);
794
 
    if (params.ground) {
795
 
      fprintf(outfile, "\tCCSD correlation energy    = %20.15f\n",
796
 
              one_energy + total_two_energy);
797
 
      fprintf(outfile, "\tTotal CCSD energy          = %20.15f\n",
798
 
              one_energy + total_two_energy + moinfo.eref);
799
 
    }
800
 
    else {
801
 
      fprintf(outfile, "\tTotal EOM CCSD correlation energy        = %20.15f\n",
802
 
          one_energy + total_two_energy);
803
 
      fprintf(outfile, "\tCCSD correlation + EOM excitation energy = %20.15f\n",
804
 
          moinfo.ecc + params.cceom_energy);
805
 
      fprintf(outfile, "\tTotal EOM CCSD energy                    = %20.15f\n",
806
 
          one_energy + total_two_energy + moinfo.eref);
807
 
    }
808
 
  }
809
 
}