~ubuntu-branches/ubuntu/precise/psicode/precise

« back to all changes in this revision

Viewing changes to src/bin/cceom/c_clean.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 CCEOM
 
3
    \brief Enter brief description of file here 
 
4
*/
 
5
#include <cstdio>
 
6
#include <cmath>
 
7
#include "MOInfo.h"
 
8
#include "Params.h"
 
9
#include "Local.h"
 
10
#define EXTERN
 
11
#include "globals.h"
 
12
 
 
13
namespace psi { namespace cceom {
 
14
 
 
15
/*** This function removes incorrectly non-zero elements from ***
 
16
 *** a vector.  The non-zero elements are due to the          ***
 
17
 *** specification of open-shell orbitals as both occupied    ***
 
18
 *** and virtual orbitals.                                    ***/
 
19
 
 
20
void c_clean(dpdfile2 *CME, dpdfile2 *Cme,
 
21
 dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf) {
 
22
 
 
23
  int *occpi, *virtpi, *occ_off, *vir_off, *openpi, C_irr;
 
24
  int nirreps, *occ_sym, *vir_sym;
 
25
  int mn, ef, m, n, e, f, h, M, N, E, F;
 
26
  int msym, nsym, esym, fsym;
 
27
 
 
28
  C_irr = CME->my_irrep;
 
29
  nirreps = moinfo.nirreps;
 
30
  occpi = moinfo.occpi; virtpi = moinfo.virtpi;
 
31
  occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
 
32
  occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
 
33
  openpi = moinfo.openpi;
 
34
 
 
35
  dpd_file2_mat_init(CME);
 
36
  dpd_file2_mat_rd(CME);
 
37
  for(h=0; h < nirreps; h++) {
 
38
    for(m=0; m<occpi[h]; m++)
 
39
      for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++)
 
40
        CME->matrix[h][m][e] = 0.0;
 
41
  }
 
42
  dpd_file2_mat_wrt(CME);
 
43
 
 
44
  dpd_file2_mat_init(Cme);
 
45
  dpd_file2_mat_rd(Cme);
 
46
  for(h=0; h < nirreps; h++) {
 
47
    for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++)
 
48
      for(e=0; e<virtpi[h^C_irr]; e++)
 
49
        Cme->matrix[h][m][e] = 0.0;
 
50
  }
 
51
  dpd_file2_mat_wrt(Cme);
 
52
 
 
53
  for(h=0; h < nirreps; h++) {
 
54
    dpd_buf4_mat_irrep_init(CMNEF, h);
 
55
    dpd_buf4_mat_irrep_rd(CMNEF, h);
 
56
    for(mn=0; mn < CMNEF->params->rowtot[h]; mn++) {
 
57
      for(ef=0; ef < CMNEF->params->coltot[h^C_irr]; ef++) {
 
58
          e = CMNEF->params->colorb[h^C_irr][ef][0];
 
59
          f = CMNEF->params->colorb[h^C_irr][ef][1];
 
60
          esym = CMNEF->params->rsym[e];
 
61
          fsym = CMNEF->params->ssym[f];
 
62
          E = e - vir_off[esym];
 
63
          F = f - vir_off[fsym];
 
64
          if ((E >= (virtpi[esym] - openpi[esym])) ||
 
65
              (F >= (virtpi[fsym] - openpi[fsym])) )
 
66
                   CMNEF->matrix[h][mn][ef] = 0.0;
 
67
      }
 
68
    }
 
69
    dpd_buf4_mat_irrep_wrt(CMNEF, h);
 
70
    dpd_buf4_mat_irrep_close(CMNEF, h);
 
71
  }
 
72
 
 
73
  for(h=0; h < nirreps; h++) {
 
74
    dpd_buf4_mat_irrep_init(Cmnef, h);
 
75
    dpd_buf4_mat_irrep_rd(Cmnef, h);
 
76
    for(mn=0; mn < Cmnef->params->rowtot[h]; mn++) {
 
77
      m = Cmnef->params->roworb[h][mn][0];
 
78
      n = Cmnef->params->roworb[h][mn][1];
 
79
      msym = Cmnef->params->psym[m];
 
80
      nsym = Cmnef->params->qsym[n];
 
81
      M = m - occ_off[msym];
 
82
      N = n - occ_off[nsym];
 
83
      for(ef=0; ef < Cmnef->params->coltot[h^C_irr]; ef++) {
 
84
        if ((M >= (occpi[msym] - openpi[msym])) ||
 
85
            (N >= (occpi[nsym] - openpi[nsym])) )
 
86
               Cmnef->matrix[h][mn][ef] = 0.0;
 
87
      }
 
88
    }
 
89
    dpd_buf4_mat_irrep_wrt(Cmnef, h);
 
90
    dpd_buf4_mat_irrep_close(Cmnef, h);
 
91
  }
 
92
 
 
93
  for(h=0; h < nirreps; h++) {
 
94
    dpd_buf4_mat_irrep_init(CMnEf, h);
 
95
    dpd_buf4_mat_irrep_rd(CMnEf, h);
 
96
    for(mn=0; mn < CMnEf->params->rowtot[h]; mn++) {
 
97
      n = CMnEf->params->roworb[h][mn][1];
 
98
      nsym = CMnEf->params->qsym[n];
 
99
      N = n - occ_off[nsym];
 
100
      for(ef=0; ef < CMnEf->params->coltot[h^C_irr]; ef++) {
 
101
        e = CMnEf->params->colorb[h^C_irr][ef][0];
 
102
        esym = CMnEf->params->rsym[e];
 
103
        E = e - vir_off[esym];
 
104
        if ((N >= (occpi[nsym] - openpi[nsym])) ||
 
105
            (E >= (virtpi[esym] - openpi[esym])) )
 
106
          CMnEf->matrix[h][mn][ef] = 0.0;
 
107
      }
 
108
    }
 
109
    dpd_buf4_mat_irrep_wrt(CMnEf, h);
 
110
    dpd_buf4_mat_irrep_close(CMnEf, h);
 
111
  }
 
112
 
 
113
  return;
 
114
}
 
115
 
 
116
 
 
117
void c_cleanSS(dpdfile2 *CME, dpdfile2 *Cme) {
 
118
  int *occpi, *virtpi, *occ_off, *vir_off, *openpi;
 
119
  int nirreps, *occ_sym, *vir_sym;
 
120
  int mn, ef, m, n, e, f;
 
121
  int h, M, N, E, F;
 
122
  int msym, nsym, esym, fsym, C_irr;
 
123
 
 
124
  C_irr = CME->my_irrep;
 
125
  nirreps = moinfo.nirreps;
 
126
  occpi = moinfo.occpi; virtpi = moinfo.virtpi;
 
127
  occ_off = moinfo.occ_off; vir_off = moinfo.vir_off;
 
128
  occ_sym = moinfo.occ_sym; vir_sym = moinfo.vir_sym;
 
129
  openpi = moinfo.openpi;
 
130
 
 
131
  dpd_file2_mat_init(CME);
 
132
  dpd_file2_mat_rd(CME);
 
133
  for(h=0; h < nirreps; h++) {
 
134
    for(m=0; m<occpi[h]; m++)
 
135
      for(e=(virtpi[h^C_irr]-openpi[h^C_irr]); e<virtpi[h^C_irr]; e++)
 
136
        CME->matrix[h][m][e] = 0.0;
 
137
  }
 
138
  dpd_file2_mat_wrt(CME);
 
139
 
 
140
  dpd_file2_mat_init(Cme);
 
141
  dpd_file2_mat_rd(Cme);
 
142
  for(h=0; h < nirreps; h++) {
 
143
    for(m=(occpi[h]-openpi[h]); m<occpi[h]; m++)
 
144
      for(e=0; e<virtpi[h^C_irr]; e++)
 
145
        Cme->matrix[h][m][e] = 0.0;
 
146
  }
 
147
  dpd_file2_mat_wrt(Cme);
 
148
 
 
149
  return;
 
150
}
 
151
 
 
152
}} // namespace psi::cceom