~ubuntu-branches/ubuntu/vivid/psicode/vivid

« back to all changes in this revision

Viewing changes to src/bin/cceom/rzero.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck
  • Date: 2008-06-07 16:49:57 UTC
  • mfrom: (2.1.2 hardy)
  • Revision ID: james.westby@ubuntu.com-20080607164957-8pifvb133yjlkagn
Tags: 3.3.0-3
* debian/rules (DEB_MAKE_CHECK_TARGET): Do not abort test suite on
  failures.
* debian/rules (DEB_CONFIGURE_EXTRA_FLAGS): Set ${bindir} to /usr/lib/psi.
* debian/rules (install/psi3): Move psi3 file to /usr/bin.
* debian/patches/07_464867_move_executables.dpatch: New patch, add
  /usr/lib/psi to the $PATH, so that the moved executables are found.
  (closes: #464867)
* debian/patches/00list: Adjusted.

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
 
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 */
46
48
    ++R_index;
47
49
 
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");
51
 
      return;
52
 
    };
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");
 
54
        return;
 
55
      }
 
56
      psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
 
57
    }
 
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");
 
62
        return;
 
63
      }
 
64
      psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
 
65
    }
 
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");
 
70
        return;
 
71
      }
 
72
      psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
 
73
    }
54
74
 
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);
122
142
 
 
143
    /* make R0 a positive number */
 
144
    /*
 
145
    if (rzero < 0.0) {
 
146
      rzero *= -1.0;
 
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);
 
152
    }
 
153
    */
 
154
 
 
155
    /*
123
156
    norm = norm_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb);
124
157
    norm *= norm;
 
158
    */
 
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);
129
164
 
 
165
    norm = dot_C(&RIA, &Ria, &fRIJAB, &fRijab, &fRIjAb);
 
166
    norm += rzero * rzero;
 
167
    fprintf(outfile,"<R|R> = %20.16lf\n",norm);
 
168
 
 
169
/* just debugging with converged solutions - also my need a sort_C() */
130
170
/*
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");
135
176
*/
 
177
/* end debugging stuff */ 
 
178
 
136
179
 
137
180
    dpd_file2_close(&RIA);
138
181
    dpd_file2_close(&Ria);
140
183
    dpd_buf4_close(&fRijab);
141
184
    dpd_buf4_close(&fRIjAb);
142
185
 
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));
 
190
    }
 
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));
 
195
    }
 
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));
 
200
    }
146
201
 
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 */
214
269
    ++R_index;
215
270
 
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");
219
 
      return;
220
 
    };
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");
 
275
        return;
 
276
      }
 
277
      psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
 
278
    }
 
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");
 
283
        return;
 
284
      }
 
285
      psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
 
286
    }
 
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");
 
291
        return;
 
292
      }
 
293
      psio_read_entry(CC_INFO, E_lbl, (char *) &(energy), sizeof(double));
 
294
    }
222
295
 
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);
243
316
 
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);
251
 
  
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);
256
 
      dpd_buf4_close(&D);
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);
 
325
    
 
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);
 
330
        dpd_buf4_close(&D);
 
331
        dpd_buf4_close(&RIjAb);
 
332
        rzero = (r1 + r2)/energy;
 
333
      }
 
334
      else {
 
335
        rzero = 0.0;
 
336
      }
259
337
    }
260
 
    else {
261
 
      rzero = 0.0;
 
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));
262
341
    }
263
342
 
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");
268
347
 
 
348
    /*
 
349
    if (rzero < 0.0) {
 
350
      rzero *= -1.0;
 
351
      dpd_file2_scm(&RIA,-1.0);
 
352
      dpd_buf4_scm(&RIjAb,-1.0);
 
353
      dpd_buf4_scm(&RIjbA,-1.0);
 
354
    }
 
355
    */
 
356
 
269
357
    norm = norm_C_rhf(&RIA, &RIjAb, &RIjbA);
270
358
    norm *= norm;
271
359
    norm += rzero * rzero;
275
363
    dpd_buf4_scm(&RIjAb, 1.0/norm);
276
364
    dpd_buf4_scm(&RIjbA, 1.0/norm);
277
365
 
 
366
/* just for debugging cc3 put normalized vector back into C as well */
 
367
/*
 
368
dpd_file2_copy(&RIA, EOM_CME, "CME 0");
 
369
dpd_buf4_copy(&RIjAb, EOM_CMnEf, "CMnEf 0");
 
370
*/
 
371
/* end debugging stuff */ 
 
372
 
278
373
    dpd_file2_close(&RIA);
279
374
    dpd_buf4_close(&RIjAb);
280
375
    dpd_buf4_close(&RIjbA);
281
376
 
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));
 
381
    }
 
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));
 
386
    }
 
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));
 
391
    }
285
392
 
286
393
    /* produce ROHF like quantities and 2RIjAb-RIjbA */
287
394
    dpd_file2_init(&RIA, CC_RAMPS, C_irr, 0, 1, R1A_lbl);