11
12
int errcod, i, j, sym, iconv,exist, state_irrep, c_irrep;
13
eom_params.max_iter = 80;
14
errcod = ip_data("MAX_ITER","%d",&(eom_params.max_iter),0);
16
14
eom_params.states_per_irrep = (int *) malloc(moinfo.nirreps * sizeof(int));
17
15
if (ip_exist("STATES_PER_IRREP",0)) {
18
16
ip_count("STATES_PER_IRREP", &i, 0);
23
21
for (i=0;i<moinfo.nirreps;++i)
24
22
errcod = ip_data("STATES_PER_IRREP","%d",&(eom_params.states_per_irrep[i]),1,i);
26
else { fprintf(outfile,"Must have states_per_irrep vector in input.\n"); exit(0); }
24
else { fprintf(outfile,"Must have states_per_irrep vector in input.\n"); exit(PSI_RETURN_FAILURE); }
28
26
eom_params.cs_per_irrep = (int *) malloc(moinfo.nirreps * sizeof(int));
29
27
for (state_irrep=0; state_irrep<moinfo.nirreps; ++state_irrep) {
30
28
eom_params.cs_per_irrep[state_irrep^moinfo.sym] = eom_params.states_per_irrep[state_irrep];
33
/* We now write out all of the final R's so prop_sym and prop_root should not be
31
eom_params.max_iter = 80 * moinfo.nirreps;
32
errcod = ip_data("MAX_ITER","%d",&(eom_params.max_iter),0);
34
/* Use prop_sym and prop_root only to determine what energy to write the file32 */
36
35
if (ip_exist("PROP_SYM",0)) {
37
36
ip_data("PROP_SYM","%d",&(eom_params.prop_sym),0);
38
eom_params.prop_sym = eom_params.prop_sym - 1;
37
eom_params.prop_sym = (eom_params.prop_sym - 1)^moinfo.sym;
41
40
for (i=0;i<moinfo.nirreps;++i)
42
if (eom_params.states_per_irrep[i]) eom_params.prop_sym = i;
41
if (eom_params.states_per_irrep[i])
42
eom_params.prop_sym = i^moinfo.sym;
44
44
if (ip_exist("PROP_ROOT",0)) {
45
45
ip_data("PROP_ROOT","%d",&(eom_params.prop_root),0);
46
if (eom_params.prop_root > eom_params.states_per_irrep[eom_params.prop_sym]) {
46
if (eom_params.prop_root > eom_params.states_per_irrep[eom_params.prop_sym^moinfo.sym]) {
47
47
fprintf(outfile,"prop_root is too big\n");
52
eom_params.prop_root = eom_params.states_per_irrep[eom_params.prop_sym];
52
eom_params.prop_root = eom_params.states_per_irrep[eom_params.prop_sym^moinfo.sym];
54
--eom_params.prop_root;
56
if ( (!strcmp(params.wfn,"EOM_CC3")) && (eom_params.prop_root != 0) ) {
57
eom_params.follow_root = 1;
60
/* so far, all R's are always kept so this is not used */
56
61
eom_params.save_all = 0;
57
errcod = ip_data("SAVE_ALL","%d",&(eom_params.save_all),0);
64
eom_params.rhf_triplets = 0;
65
errcod = ip_data("RHF_TRIPLETS","%d",&(eom_params.rhf_triplets),0);
66
if (eom_params.rhf_triplets != 0) eom_params.mult = 3;
59
68
eom_params.excitation_range = 2;
60
69
errcod = ip_data("EXCITATION_RANGE","%d",&(eom_params.excitation_range),0);
65
74
eom_params.vectors_per_root_SS = 5;
66
75
errcod = ip_data("VECTORS_PER_ROOT_SS","%d",&(eom_params.vectors_per_root_SS),0);
68
eom_params.vectors_per_root = 6;
77
eom_params.vectors_per_root = 12;
69
78
errcod = ip_data("VECTORS_PER_ROOT","%d",&(eom_params.vectors_per_root),0);
80
eom_params.vectors_cc3 = eom_params.vectors_per_root;
81
errcod = ip_data("VECTORS_CC3","%d",&(eom_params.vectors_cc3),0);
82
if (eom_params.vectors_cc3 > eom_params.vectors_per_root)
83
eom_params.vectors_cc3 = eom_params.vectors_per_root;
85
eom_params.restart_vectors_per_root = 1;
86
errcod = ip_data("RESTART_VECTORS_PER_ROOT","%d",&(eom_params.restart_vectors_per_root),0);
71
88
eom_params.complex_tol = 1E-12;
72
89
errcod = ip_data("COMPLEX_TOL","%d",&(iconv),0);
73
90
if(errcod == IPE_OK) eom_params.complex_tol = 1.0*pow(10.0,(double) -iconv);
75
eom_params.residual_tol = 1E-4;
92
eom_params.residual_tol = 1E-6;
76
93
errcod = ip_data("RESIDUAL_TOL","%d",&(iconv),0);
77
94
if(errcod == IPE_OK) eom_params.residual_tol = 1.0*pow(10.0,(double) -iconv);
80
97
errcod = ip_data("RESIDUAL_TOL_SS","%d",&(iconv),0);
81
98
if(errcod == IPE_OK) eom_params.residual_tol_SS = 1.0*pow(10.0,(double) -iconv);
83
eom_params.eval_tol = 1E-6;
100
eom_params.eval_tol = 1E-8;
84
101
errcod = ip_data("EVAL_TOL","%d",&(iconv),0);
85
102
if(errcod == IPE_OK) eom_params.eval_tol = 1.0*pow(10.0,(double) -iconv);
104
eom_params.eval_tol_SS = 1E-6;
105
errcod = ip_data("EVAL_TOL_SS","%d",&(iconv),0);
106
if(errcod == IPE_OK) eom_params.eval_tol_SS = 1.0*pow(10.0,(double) -iconv);
87
108
eom_params.schmidt_add_residual_tol = 1E-3;
88
109
errcod = ip_data("SCHMIDT_ADD_RESIDUAL_TOL","%d",&(iconv),0);
89
110
if(errcod == IPE_OK) eom_params.schmidt_add_residual_tol = 1.0*pow(10.0,(double) -iconv);
112
eom_params.skip_diagSS = 0;
114
errcod = ip_boolean("SKIP_DIAGSS",&(i),0);
115
if (i) eom_params.skip_diagSS = 1;
117
eom_params.restart_eom_cc3 = 0;
119
errcod = ip_boolean("RESTART_EOM_CC3",&(i),0);
120
if (i) eom_params.restart_eom_cc3 = 1;
91
122
eom_params.max_iter_SS = 500;
93
124
if(eom_params.guess == NULL) { /* we didn't use the cmdline arg --reuse */
112
143
fprintf(outfile, "\tPrint HbarSS iterations? = %5d\n", eom_params.print_singles);
113
144
fprintf(outfile, "\tExcitation range for HBarSS = %5d\n", eom_params.excitation_range);
114
145
fprintf(outfile, "\tEigenvalue tolerance = %5.1e\n", eom_params.eval_tol);
146
fprintf(outfile, "\tEigenvalue toleranceSS = %5.1e\n", eom_params.eval_tol_SS);
115
147
fprintf(outfile, "\tResidual vector tolerance = %5.1e\n", eom_params.residual_tol);
148
fprintf(outfile, "\tResidual vector toleranceSS = %5.1e\n", eom_params.residual_tol_SS);
116
149
fprintf(outfile, "\tComplex tolerance = %5.1e\n", eom_params.complex_tol);
117
fprintf(outfile, "\tRoot for properties = %5d\n", eom_params.prop_root);
118
fprintf(outfile, "\tSave all R vectors = %5d\n", eom_params.save_all);
150
fprintf(outfile, "\tRoot for properties = %5d\n", eom_params.prop_root + 1);
119
151
fprintf(outfile, "\tSym of state for properties = %6s\n", moinfo.labels[eom_params.prop_sym]);
120
152
fprintf(outfile, "\tGuess vectors taken from = %s\n", eom_params.guess);
153
fprintf(outfile, "\tRestart EOM CC3 = %s\n", eom_params.restart_eom_cc3?"YES":"NO");
154
if (eom_params.follow_root)
155
fprintf(outfile, "\tRoot following for CC3 turned on.\n");
121
156
fprintf(outfile, "\n\n");