2
** CCEOM: Program to calculate the EOM CCSD right-hand eigenvector and energy
7
#include <libipv1/ip_lib.h>
8
#include <libciomr/libciomr.h>
9
#include <libpsio/psio.h>
13
void init_io(int argc, char *argv[]);
14
void get_moinfo(void);
18
void get_params(void);
19
void get_eom_params(void);
20
void form_dpd_dp(void);
21
int **cacheprep_uhf(int level, int *cachefiles);
22
int **cacheprep_rhf(int level, int *cachefiles);
24
void hbar_norms(void);
26
/* local correlation functions */
27
void local_init(void);
28
void local_done(void);
30
int main(int argc, char *argv[])
32
int i, h, done=0, *cachefiles, **cachelist;
34
fprintf(outfile,"\n\t**********************************************************\n");
35
fprintf(outfile,"\t* CCEOM: An Equation of Motion Coupled Cluster Program *\n");
36
fprintf(outfile,"\t**********************************************************\n");
49
cachefiles = init_int_array(PSIO_MAXUNIT);
51
if (params.ref == 2) { /* UHF */
52
cachelist = cacheprep_uhf(params.cachelev, cachefiles);
53
/* cachelist = init_int_matrix(32,32); */
55
dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles,
56
cachelist, NULL, 4, moinfo.aoccpi, moinfo.aocc_sym, moinfo.avirtpi,
57
moinfo.avir_sym, moinfo.boccpi, moinfo.bocc_sym, moinfo.bvirtpi, moinfo.bvir_sym);
59
else { /* RHF or ROHF */
60
cachelist = cacheprep_rhf(params.cachelev, cachefiles);
61
/* cachelist = init_int_matrix(12,12); */
63
dpd_init(0, moinfo.nirreps, params.memory, 0, cachefiles,
64
cachelist, NULL, 2, moinfo.occpi, moinfo.occ_sym,
65
moinfo.virtpi, moinfo.vir_sym);
68
if(params.local) local_init();
73
if(params.local) local_done();
83
void init_io(int argc, char *argv[])
86
extern char *gprgid();
87
char *progid, *argv_unparsed[100];
89
eom_params.dot_with_L = 0;
90
eom_params.guess = NULL;
91
for (i=1, num_unparsed=0; i<argc; ++i) {
92
if (!strcmp(argv[i],"--dot_with_L"))
93
eom_params.dot_with_L = 1;
94
else if(!strcmp(argv[i], "--reuse"))
95
eom_params.guess = strdup("DISK");
97
argv_unparsed[num_unparsed++] = argv[i];
100
progid = (char *) malloc(strlen(gprgid())+2);
101
sprintf(progid, ":%s",gprgid());
103
psi_start(num_unparsed, argv_unparsed, 0);
104
ip_cwk_add(":INPUT");
110
for(i=CC_MIN; i <= CC_MAX; i++) psio_open(i,1);
112
for(i=CC_MIN; i <= CC_MISC; i++) psio_open(i,1);
113
for(i=CC_TMP; i <= EOM_D; i++) psio_open(i,0);
114
for(i=EOM_Cme; i <= CC_MAX; i++) psio_open(i,0);
117
/* it will read it anyway if its there ?
118
if(eom_params.guess != NULL) {
119
if(!strcmp(eom_params.guess,"DISK"))
120
psio_open(EOM_CME,1);
123
psio_open(EOM_CME,0);
126
if (eom_params.dot_with_L) {
127
psio_read_entry(CC_INFO,"EOM L0",(char *) &eom_params.L0, sizeof(double));
128
psio_read_entry(CC_INFO,"EOM L Irrep",(char *) &eom_params.L_irr, sizeof(int));
135
/* for(i=CC_MIN; i <= CC_MISC; i++) psio_close(i,1);
136
for(i=CC_TMP; i <= CC_MAX; i++) psio_close(i,1);
138
for(i=CC_MIN; i <= CC_DIIS_AMP; i++) psio_close(i,1);
139
for(i=CC_TMP; i <= CC_TMP11; i++) psio_close(i,0);
140
for(i=CC_TMP11+1; i <= CC_MAX; i++) psio_close(i,1);
149
char *prgid = "CCEOM";
153
void form_dpd_dp(void) {
154
int h, h0, h1, cnt, nirreps;
155
nirreps = moinfo.nirreps;
157
dpd_dp = (int ***) malloc(nirreps * sizeof(int **));
158
for(h=0; h < nirreps; h++) {
159
dpd_dp[h] = init_int_matrix(nirreps,2);
161
for(h0=0; h0 < nirreps; h0++) {
162
for(h1=0; h1 < nirreps; h1++) {
164
dpd_dp[h][cnt][0] = h0;
165
dpd_dp[h][cnt++][1] = h1;