5
#include <libipv1/ip_lib.h>
6
#include <libciomr/libciomr.h>
7
#include <libdpd/dpd.h>
8
#include <libchkpt/chkpt.h>
10
#include <libiwl/iwl.h>
11
#include <physconst.h>
15
void init_io(int argc, char *argv[]);
17
void get_moinfo(void);
18
void get_params(void);
20
int **cacheprep_rhf(int level, int *cachefiles);
21
int **cacheprep_uhf(int level, int *cachefiles);
22
void cachedone_rhf(int **cachelist);
23
struct dpd_file4_cache_entry *priority_list(void);
33
void relax_opdm(void);
38
void write_data(void);
39
void check_energy(int);
40
void sort_twopdm(void);
44
int main(int argc, char *argv[])
49
struct dpd_file4_cache_entry *priority;
58
cachefiles = init_int_array(PSIO_MAXUNIT);
60
if(params.ref == 2) { /** UHF **/
61
cachelist = cacheprep_uhf(params.cachelev,cachefiles);
62
dpd_init(0,mo.nirreps,params.memory,params.cachetype,cachefiles,cachelist,
63
NULL,4,mo.aoccpi,mo.aocc_sym,mo.avirpi,mo.avir_sym,mo.boccpi,
64
mo.bocc_sym,mo.bvirpi,mo.bvir_sym);
66
else { /** RHF or ROHF **/
67
cachelist = cacheprep_rhf(params.cachelev,cachefiles);
68
priority = priority_list();
69
dpd_init(0,mo.nirreps,params.memory,params.cachetype,cachefiles,
70
cachelist,priority,2,mo.occpi,mo.occ_sym,mo.virpi,mo.vir_sym);
77
fprintf(outfile,"\n");
78
fprintf(outfile,"\tMP2 correlation energy = %20.15f\n",mo.Emp2);
79
fprintf(outfile,"\tMP2 total energy = %20.15f\n",mo.Escf+mo.Emp2);
82
chkpt_init(PSIO_OPEN_OLD);
83
chkpt_wt_etot(mo.Escf+mo.Emp2);
88
if(params.relax_opdm) {
123
void init_io(int argc, char *argv[])
126
int num_extra_args=0;
128
extern char *gprgid();
131
extra_args = (char **)malloc(argc*sizeof(char *));
132
progid = (char *)malloc(strlen(gprgid())+2);
133
sprintf(progid, ":%s",gprgid());
137
for(i=1; i<argc; i++) {
138
if(strcmp(argv[i], "--opdm") == 0) {
142
extra_args[num_extra_args++] = argv[i];
146
psi_start(num_extra_args,extra_args,0);
152
for(i=CC_MIN; i <= CC_MAX; i++)
160
fprintf(outfile, "\t\t\t*************************\n");
161
fprintf(outfile, "\t\t\t* *\n");
162
fprintf(outfile, "\t\t\t* MP2 *\n");
163
fprintf(outfile, "\t\t\t* *\n");
164
fprintf(outfile, "\t\t\t*************************\n");
172
ioff = init_int_array(MAXIOFF);
174
for(i=1; i < MAXIOFF; i++) {
175
ioff[i] = ioff[i-1] + i;
191
for(i=0; i < mo.nirreps; i++)
192
free(mo.irreplabels[i]);
193
free(mo.irreplabels);
196
if(params.ref == 2) {
230
for(i=CC_MIN; i <= CC_MAX; i++)