7
7
extern double norm_C(dpdfile2 *CME, dpdfile2 *Cme,
8
8
dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf);
9
extern double dot_C(dpdfile2 *CME, dpdfile2 *Cme,
10
dpdbuf4 *CMNEF, dpdbuf4 *Cmnef, dpdbuf4 *CMnEf);
9
11
extern double norm_C_rhf(dpdfile2 *CME, dpdbuf4 *CMnEf, dpdbuf4 *CMnfE);
10
12
extern void scm_C(dpdfile2 *CME, dpdfile2 *Cme, dpdbuf4 *CMNEF,
11
13
dpdbuf4 *Cmnef, dpdbuf4 *CMnEf, double a);
45
47
if (!converged[i]) continue; /* this root did not converged */
48
sprintf(E_lbl, "EOM CCSD Energy for root %d %d", C_irr, R_index);
49
if ( psio_tocscan(CC_INFO, E_lbl) == NULL) {
50
fprintf(outfile,"No EOM CCSD Energy found in CC_INFO. Not normalizing R.\n");
53
psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
50
if(!strcmp(params.wfn,"EOM_CC2")) {
51
sprintf(E_lbl, "EOM CC2 Energy for root %d %d", C_irr, R_index);
52
if(psio_tocscan(CC_INFO, E_lbl) == NULL) {
53
fprintf(outfile,"No EOM CC2 Energy found in CC_INFO. Not normalizing R.\n");
56
psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
58
else if(!strcmp(params.wfn,"EOM_CCSD")) {
59
sprintf(E_lbl, "EOM CCSD Energy for root %d %d", C_irr, R_index);
60
if(psio_tocscan(CC_INFO, E_lbl) == NULL) {
61
fprintf(outfile,"No EOM CCSD Energy found in CC_INFO. Not normalizing R.\n");
64
psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
66
else if(!strcmp(params.wfn,"EOM_CC3")) {
67
sprintf(E_lbl, "EOM CC3 Energy for root %d %d", C_irr, R_index);
68
if(psio_tocscan(CC_INFO, E_lbl) == NULL) {
69
fprintf(outfile,"No EOM CC3 Energy found in CC_INFO. Not normalizing R.\n");
72
psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
55
75
sprintf(R1A_lbl, "RIA %d %d", C_irr, R_index);
56
76
sprintf(R1B_lbl, "Ria %d %d", C_irr, R_index);
120
140
dpd_buf4_init(&fRijab, CC_RAMPS, C_irr, BB_OCC, BB_VIR, BB_OCC, BB_VIR, 0, R2BB_lbl);
121
141
dpd_buf4_init(&fRIjAb, CC_RAMPS, C_irr, AB_OCC, AB_VIR, AB_OCC, AB_VIR, 0, R2AB_lbl);
143
/* make R0 a positive number */
147
dpd_file2_scm(&RIA,-1.0);
148
dpd_file2_scm(&Ria,-1.0);
149
dpd_buf4_scm(&fRIJAB,-1.0);
150
dpd_buf4_scm(&fRijab,-1.0);
151
dpd_buf4_scm(&fRIjAb,-1.0);
123
156
norm = norm_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb);
159
norm = dot_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb);
125
160
norm += rzero * rzero;
126
161
norm = sqrt(norm);
127
162
rzero = rzero / norm;
128
163
scm_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb, 1.0/norm);
165
norm = dot_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb);
166
norm += rzero * rzero;
167
fprintf(outfile,"<R|R> = %20.16lf\n",norm);
169
/* just debugging with converged solutions - also my need a sort_C() */
131
dpd_file2_print(&RIA, outfile);
132
dpd_buf4_print(&fRIJAB, outfile, 1);
133
dpd_buf4_print(&fRijab, outfile, 1);
134
dpd_buf4_print(&fRIjAb, outfile, 1);
171
dpd_file2_copy(&RIA, EOM_CME, "CME 0");
172
dpd_file2_copy(&Ria, EOM_Cme, "Cme 0");
173
dpd_buf4_copy(&fRIJAB, EOM_CMNEF, "CMNEF 0");
174
dpd_buf4_copy(&fRijab, EOM_Cmnef, "Cmnef 0");
175
dpd_buf4_copy(&fRIjAb, EOM_CMnEf, "CMnEf 0");
177
/* end debugging stuff */
137
180
dpd_file2_close(&RIA);
138
181
dpd_file2_close(&Ria);
140
183
dpd_buf4_close(&fRijab);
141
184
dpd_buf4_close(&fRIjAb);
143
fprintf(outfile,"EOM CCSD R0 for root %d = %15.10lf\n", R_index, rzero);
144
sprintf(lbl, "EOM CCSD R0 for root %d %d", C_irr, R_index);
145
psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double));
186
if(!strcmp(params.wfn,"EOM_CC2")) {
187
fprintf(outfile,"EOM CC2 R0 for root %d = %15.11lf\n", R_index, rzero);
188
sprintf(lbl, "EOM CC2 R0 for root %d %d", C_irr, R_index);
189
psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double));
191
else if(!strcmp(params.wfn,"EOM_CCSD")) {
192
fprintf(outfile,"EOM CCSD R0 for root %d = %15.11lf\n", R_index, rzero);
193
sprintf(lbl, "EOM CCSD R0 for root %d %d", C_irr, R_index);
194
psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double));
196
else if(!strcmp(params.wfn,"EOM_CC3")) {
197
fprintf(outfile,"EOM CC3 R0 for root %d = %15.11lf\n", R_index, rzero);
198
sprintf(lbl, "EOM CC3 R0 for root %d %d", C_irr, R_index);
199
psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double));
147
202
if (eom_params.dot_with_L) {
148
203
/* evaluate check <R|L> == 0 */
213
268
if (!converged[i]) continue; /* this root did not converge */
216
sprintf(E_lbl, "EOM CCSD Energy for root %d %d", C_irr, R_index);
217
if ( psio_tocscan(CC_INFO, E_lbl) == NULL) {
218
fprintf(outfile,"No EOM CCSD Energy found in CC_INFO. Not normalizing R.\n");
221
psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
271
if(!strcmp(params.wfn,"EOM_CC2")) {
272
sprintf(E_lbl, "EOM CC2 Energy for root %d %d", C_irr, R_index);
273
if(psio_tocscan(CC_INFO, E_lbl) == NULL) {
274
fprintf(outfile,"No EOM CC2 Energy found in CC_INFO. Not normalizing R.\n");
277
psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
279
else if(!strcmp(params.wfn,"EOM_CCSD")) {
280
sprintf(E_lbl, "EOM CCSD Energy for root %d %d", C_irr, R_index);
281
if(psio_tocscan(CC_INFO, E_lbl) == NULL) {
282
fprintf(outfile,"No EOM CCSD Energy found in CC_INFO. Not normalizing R.\n");
285
psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
287
else if(!strcmp(params.wfn,"EOM_CC3")) {
288
sprintf(E_lbl, "EOM CC3 Energy for root %d %d", C_irr, R_index);
289
if(psio_tocscan(CC_INFO, E_lbl) == NULL) {
290
fprintf(outfile,"No EOM CC3 Energy found in CC_INFO. Not normalizing R.\n");
293
psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
223
296
sprintf(R1A_lbl, "RIA %d %d", C_irr, R_index);
224
297
sprintf(R1B_lbl, "Ria %d %d", C_irr, R_index);
242
315
dpd_buf4_close(&RIjAb);
244
317
/* calculate <0| hbar | 0> */
245
if (C_irr == H_IRR) {
246
dpd_file2_init(&FIA, CC_OEI, H_IRR, 0, 1, "FME");
247
dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl);
248
r1 = 2.0 * dpd_file2_dot(&FIA, &RIA);
249
dpd_file2_close(&RIA);
250
dpd_file2_close(&FIA);
252
sprintf(lbl, "%s %d %d", "2RIjAb - RIjbA", C_irr, R_index);
253
dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, lbl);
254
dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>");
255
r2 = dpd_buf4_dot(&D, &RIjAb);
257
dpd_buf4_close(&RIjAb);
258
rzero = (r1 + r2)/energy;
318
if (!params.full_matrix) {
319
if (C_irr == H_IRR) {
320
dpd_file2_init(&FIA, CC_OEI, H_IRR, 0, 1, "FME");
321
dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl);
322
r1 = 2.0 * dpd_file2_dot(&FIA, &RIA);
323
dpd_file2_close(&RIA);
324
dpd_file2_close(&FIA);
326
sprintf(lbl, "%s %d %d", "2RIjAb - RIjbA", C_irr, R_index);
327
dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, lbl);
328
dpd_buf4_init(&D, CC_DINTS, H_IRR, 0, 5, 0, 5, 0, "D <ij|ab>");
329
r2 = dpd_buf4_dot(&D, &RIjAb);
331
dpd_buf4_close(&RIjAb);
332
rzero = (r1 + r2)/energy;
338
else { /* full matrix */
339
sprintf(lbl, "%s %d %d", "R0", C_irr, R_index);
340
psio_read_entry(CC_RAMPS, lbl, (char *) &rzero, sizeof(double));
264
343
/* Now normalize R so that <R|R> = 1 */
266
345
dpd_buf4_init(&RIjAb, CC_RAMPS, C_irr, 0, 5, 0, 5, 0, R2AB_lbl);
267
346
dpd_buf4_init(&RIjbA, CC_TMP, C_irr, 0, 5, 0, 5, 0, "RIjbA");
351
dpd_file2_scm(&RIA,-1.0);
352
dpd_buf4_scm(&RIjAb,-1.0);
353
dpd_buf4_scm(&RIjbA,-1.0);
269
357
norm = norm_C_rhf(&RIA, &RIjAb, &RIjbA);
271
359
norm += rzero * rzero;
275
363
dpd_buf4_scm(&RIjAb, 1.0/norm);
276
364
dpd_buf4_scm(&RIjbA, 1.0/norm);
366
/* just for debugging cc3 put normalized vector back into C as well */
368
dpd_file2_copy(&RIA, EOM_CME, "CME 0");
369
dpd_buf4_copy(&RIjAb, EOM_CMnEf, "CMnEf 0");
371
/* end debugging stuff */
278
373
dpd_file2_close(&RIA);
279
374
dpd_buf4_close(&RIjAb);
280
375
dpd_buf4_close(&RIjbA);
282
fprintf(outfile,"EOM CCSD R0 for root %d = %15.10lf\n", R_index, rzero);
283
sprintf(lbl, "EOM CCSD R0 for root %d %d", C_irr, R_index);
284
psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double));
377
if(!strcmp(params.wfn,"EOM_CC2")) {
378
fprintf(outfile,"EOM CC2 R0 for root %d = %15.11lf\n", R_index, rzero);
379
sprintf(lbl, "EOM CC2 R0 for root %d %d", C_irr, R_index);
380
psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double));
382
else if(!strcmp(params.wfn,"EOM_CCSD")) {
383
fprintf(outfile,"EOM CCSD R0 for root %d = %15.11lf\n", R_index, rzero);
384
sprintf(lbl, "EOM CCSD R0 for root %d %d", C_irr, R_index);
385
psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double));
387
else if(!strcmp(params.wfn,"EOM_CC3")) {
388
fprintf(outfile,"EOM CC3 R0 for root %d = %15.11lf\n", R_index, rzero);
389
sprintf(lbl, "EOM CC3 R0 for root %d %d", C_irr, R_index);
390
psio_write_entry(CC_INFO, lbl, (char *) &rzero, sizeof(double));
286
393
/* produce ROHF like quantities and 2RIjAb-RIjbA */
287
394
dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl);