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

« back to all changes in this revision

Viewing changes to src/bin/ccsort/ccsort.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 CCSORT
 
3
    \brief Enter brief description of file here 
 
4
*/
 
5
/*
 
6
**  CCSORT: Program to reorganize integrals for CC and MBPT calculations.
 
7
*/
 
8
 
 
9
#include <cstdio>
 
10
#include <cstdlib>
 
11
#include <cstring>
 
12
#include <libipv1/ip_lib.h>
 
13
#include <libciomr/libciomr.h>
 
14
#include <libdpd/dpd.h>
 
15
#include <libpsio/psio.h>
 
16
#include <libqt/qt.h>
 
17
#include <psifiles.h>
 
18
#include "MOInfo.h"
 
19
#include "Params.h"
 
20
#include "Local.h"
 
21
#include "globals.h"
 
22
 
 
23
namespace psi { namespace ccsort {
 
24
 
 
25
#define IOFF_MAX 32641
 
26
 
 
27
void init_io(int argc, char *argv[]);
 
28
void init_ioff(void);
 
29
void title(void);
 
30
void get_params(void);
 
31
void get_moinfo(void);
 
32
void sort_oei(void);
 
33
void sort_tei(void);
 
34
void b_sort(void);
 
35
void c_sort(void);
 
36
void d_sort(void);
 
37
void e_sort(void);
 
38
void f_sort(void);
 
39
void d_spinad(void);
 
40
void e_spinad(void);
 
41
void f_spinad(void);
 
42
void scf_check(void);
 
43
void fock(void);
 
44
void denom(void);
 
45
void exit_io(void);
 
46
void cleanup(void);
 
47
int **cacheprep_uhf(int level, int *cachefiles);
 
48
int **cacheprep_rhf(int level, int *cachefiles);
 
49
void cachedone_uhf(int **cachelist);
 
50
void cachedone_rhf(int **cachelist);
 
51
void local_init(void);
 
52
void local_done(void);
 
53
void cc_memcheck(void);
 
54
 
 
55
}} //namespace psi::ccsort
 
56
 
 
57
using namespace psi::ccsort;
 
58
 
 
59
int main(int argc, char *argv[])
 
60
{
 
61
  int i;
 
62
  int **cachelist, *cachefiles;
 
63
  int bamount,famount; /* Truncated theoretical number of B/F-type ints that
 
64
                          could be stored in cache at once                  */
 
65
 
 
66
  unsigned long int ia_size, ab_size, ij_size, f_size, t2_size, b_size;
 
67
 
 
68
  init_io(argc,argv);
 
69
  init_ioff();
 
70
  title();
 
71
 
 
72
  timer_init();
 
73
 
 
74
  get_params();
 
75
  get_moinfo();
 
76
 
 
77
  cachefiles = init_int_array(PSIO_MAXUNIT);
 
78
 
 
79
  if(params.ref == 2) { /*** UHF references ***/
 
80
    cachelist = cacheprep_uhf(params.cachelev, cachefiles);
 
81
 
 
82
    dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, 
 
83
             NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi, moinfo.avir_sym,
 
84
             moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym);
 
85
  } 
 
86
  else { /*** RHF/ROHF references ***/
 
87
    cachelist = cacheprep_rhf(params.cachelev, cachefiles);
 
88
 
 
89
    dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles, cachelist, 
 
90
             NULL, 2, moinfo.occpi, moinfo.occ_sym, moinfo.virtpi, 
 
91
             moinfo.vir_sym);
 
92
  }
 
93
 
 
94
  /* run a small computation of memory and disk requirements */
 
95
  cc_memcheck();
 
96
 
 
97
  fprintf(outfile, "\n");
 
98
 
 
99
  sort_oei();
 
100
  sort_tei();
 
101
  c_sort();
 
102
  d_sort();
 
103
  e_sort();
 
104
  f_sort(); 
 
105
  if(params.ref == 0) {
 
106
    d_spinad();
 
107
    e_spinad();
 
108
/*     f_spinad(); */
 
109
  }
 
110
  scf_check();
 
111
  fock();
 
112
  denom();
 
113
 
 
114
  /* CPHF stuff for local correlation tests */
 
115
  if(params.local) {
 
116
    local_init();
 
117
    local_done();
 
118
  }
 
119
 
 
120
  dpd_close(0);
 
121
 
 
122
  if(params.ref == 2) cachedone_uhf(cachelist);
 
123
  else cachedone_rhf(cachelist);
 
124
  free(cachefiles);
 
125
 
 
126
  timer_done();
 
127
 
 
128
  cleanup();
 
129
  exit_io();
 
130
  exit(PSI_RETURN_SUCCESS);
 
131
}
 
132
 
 
133
extern "C" { const char *gprgid() { const char *prgid = "CCSORT"; return(prgid); } }
 
134
 
 
135
namespace psi { namespace ccsort {
 
136
 
 
137
void init_io(int argc, char *argv[])
 
138
{
 
139
  int i, num_unparsed;
 
140
  char *progid, **argv_unparsed;
 
141
 
 
142
  progid = (char *) malloc(strlen(gprgid())+2);
 
143
  sprintf(progid, ":%s",gprgid());
 
144
 
 
145
  argv_unparsed = (char **) malloc(argc * sizeof(char *));
 
146
  params.reset = 0;
 
147
  for(i=1, num_unparsed=0; i < argc; i++) {
 
148
    if(!strcmp(argv[i], "--reset")) params.reset = 1;
 
149
    else argv_unparsed[num_unparsed++] = argv[i];
 
150
  }
 
151
 
 
152
  psi_start(&infile,&outfile,&psi_file_prefix,num_unparsed, argv_unparsed, 0);
 
153
  free(argv_unparsed);
 
154
 
 
155
  ip_cwk_add(progid);
 
156
  free(progid);
 
157
  tstart(outfile);
 
158
  psio_init(); psio_ipv1_config();
 
159
 
 
160
  if(params.reset) for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,0);
 
161
  else for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1);
 
162
}
 
163
 
 
164
void title(void)
 
165
{
 
166
  fprintf(outfile, "\n");
 
167
  fprintf(outfile, "\t\t\t**************************\n");
 
168
  fprintf(outfile, "\t\t\t*                        *\n");
 
169
  fprintf(outfile, "\t\t\t*         CCSORT         *\n");
 
170
  fprintf(outfile, "\t\t\t*                        *\n");
 
171
  fprintf(outfile, "\t\t\t**************************\n");
 
172
  fprintf(outfile, "\n");
 
173
}
 
174
 
 
175
void exit_io(void)
 
176
{
 
177
  int i;
 
178
  for(i=CC_MIN; i < CC_TMP; i++) psio_close(i,1);
 
179
  for(i=CC_TMP; i <= CC_TMP11; i++) psio_close(i,0);  /* get rid of TMP files */
 
180
  for(i=CC_TMP11+1; i <= CC_MAX; i++) psio_close(i,1);
 
181
 
 
182
  psio_done();
 
183
  tstop(outfile);
 
184
  psi_stop(infile,outfile,psi_file_prefix);
 
185
}
 
186
 
 
187
void init_ioff(void)
 
188
{
 
189
  int i;
 
190
  ioff = init_int_array(IOFF_MAX);
 
191
  ioff[0] = 0;
 
192
  for(i=1; i < IOFF_MAX; i++) ioff[i] = ioff[i-1] + i;
 
193
}
 
194
 
 
195
void cleanup(void)
 
196
{
 
197
  int i;
 
198
 
 
199
  psio_write_entry(CC_INFO, "Reference Energy", (char *) &(moinfo.eref),
 
200
                   sizeof(double));
 
201
 
 
202
  if(params.ref == 2) {
 
203
 
 
204
    free(moinfo.pitz2qt_A);
 
205
    free(moinfo.pitz2qt_B);
 
206
    free(moinfo.qt2pitz_A);
 
207
    free(moinfo.qt2pitz_B);
 
208
 
 
209
    free(moinfo.aocc);
 
210
    free(moinfo.bocc);
 
211
    free(moinfo.avir);
 
212
    free(moinfo.bvir);
 
213
    free(moinfo.all_aocc);
 
214
    free(moinfo.all_bocc);
 
215
    free(moinfo.all_avir);
 
216
    free(moinfo.all_bvir);
 
217
    free(moinfo.aoccpi);
 
218
    free(moinfo.boccpi);
 
219
    free(moinfo.avirtpi);
 
220
    free(moinfo.bvirtpi);
 
221
    free(moinfo.all_aoccpi);
 
222
    free(moinfo.all_boccpi);
 
223
    free(moinfo.all_avirtpi);
 
224
    free(moinfo.all_bvirtpi);
 
225
 
 
226
    free(moinfo.cc_aocc);
 
227
    free(moinfo.cc_bocc);
 
228
    free(moinfo.cc_avir);
 
229
    free(moinfo.cc_bvir);
 
230
    free(moinfo.qt_aocc);
 
231
    free(moinfo.qt_bocc);
 
232
    free(moinfo.qt_avir);
 
233
    free(moinfo.qt_bvir);
 
234
    free(moinfo.aocc_sym);
 
235
    free(moinfo.bocc_sym);
 
236
    free(moinfo.avir_sym);
 
237
    free(moinfo.bvir_sym);
 
238
 
 
239
    free(moinfo.cc_allaocc);
 
240
    free(moinfo.cc_allbocc);
 
241
    free(moinfo.cc_allavir);
 
242
    free(moinfo.cc_allbvir);
 
243
    free(moinfo.qt_allaocc);
 
244
    free(moinfo.qt_allbocc);
 
245
    free(moinfo.qt_allavir);
 
246
    free(moinfo.qt_allbvir);
 
247
    free(moinfo.allaocc_sym);  
 
248
    free(moinfo.allbocc_sym);  
 
249
    free(moinfo.allavir_sym);
 
250
    free(moinfo.allbvir_sym);
 
251
 
 
252
    free(moinfo.aocc_off);
 
253
    free(moinfo.bocc_off);
 
254
    free(moinfo.avir_off);
 
255
    free(moinfo.bvir_off);
 
256
    free(moinfo.all_aocc_off);
 
257
    free(moinfo.all_bocc_off);
 
258
    free(moinfo.all_avir_off);
 
259
    free(moinfo.all_bvir_off);
 
260
  }
 
261
  else {
 
262
 
 
263
    free(moinfo.pitz2qt);
 
264
    free(moinfo.qt2pitz);
 
265
 
 
266
    free(moinfo.occ);
 
267
    free(moinfo.vir);
 
268
    free(moinfo.all_occ);
 
269
    free(moinfo.all_vir);
 
270
    free(moinfo.socc);
 
271
    free(moinfo.all_socc);
 
272
    free(moinfo.occpi);
 
273
    free(moinfo.virtpi);
 
274
    free(moinfo.all_occpi);
 
275
    free(moinfo.all_virtpi);
 
276
    free(moinfo.orbsym);
 
277
 
 
278
    free(moinfo.cc_occ);
 
279
    free(moinfo.cc_vir);
 
280
    free(moinfo.qt_occ);
 
281
    free(moinfo.qt_vir);
 
282
    free(moinfo.occ_sym);
 
283
    free(moinfo.vir_sym);
 
284
 
 
285
    free(moinfo.cc_allocc);
 
286
    free(moinfo.cc_allvir);
 
287
    free(moinfo.qt_allocc);
 
288
    free(moinfo.qt_allvir);
 
289
    free(moinfo.allocc_sym);  
 
290
    free(moinfo.allvir_sym);
 
291
 
 
292
    free(moinfo.occ_off);
 
293
    free(moinfo.vir_off);
 
294
    free(moinfo.all_occ_off);
 
295
    free(moinfo.all_vir_off);
 
296
 
 
297
  }
 
298
 
 
299
  free(moinfo.pitzer2qt);
 
300
  free(moinfo.qt2pitzer);
 
301
 
 
302
  free(moinfo.sopi);
 
303
  free(moinfo.orbspi);
 
304
  free(moinfo.clsdpi);
 
305
  free(moinfo.openpi);
 
306
  free(moinfo.uoccpi);
 
307
  free(moinfo.fruocc);
 
308
  free(moinfo.frdocc);
 
309
  for(i=0; i < moinfo.nirreps; i++)
 
310
    free(moinfo.labels[i]);
 
311
  free(moinfo.labels);
 
312
  free(moinfo.frozen);
 
313
  free(ioff);
 
314
}
 
315
 
 
316
}} //namespace psi::ccsort
 
317