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

« back to all changes in this revision

Viewing changes to src/bin/cceom/follow_root.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:
 
1
/*
 
2
 root_following: returns index of vector in EOM_Cxxx with maximum overlap with
 
3
 vector "CCSD Cxxx" in CC3_MISC
 
4
 */
 
5
 
 
6
#include <stdio.h>
 
7
#include <math.h>
 
8
#define EXTERN
 
9
#include "globals.h"
 
10
 
 
11
int follow_root(int L, double **alpha, int C_irr) {
 
12
  dpdfile2 CME, Cme, RME, Rme;
 
13
  dpdbuf4 CMNEF, Cmnef, CMnEf, RMNEF, Rmnef, RMnEf;
 
14
  char lbl[32];
 
15
  double *CR_overlap, tval;
 
16
  int i,j;
 
17
 
 
18
  CR_overlap = init_array(L);
 
19
 
 
20
  /* open CCSD vector "R" from CC3_MISC */
 
21
  if (params.eom_ref == 0) {
 
22
    dpd_file2_init(&RME, CC3_MISC, C_irr, 0, 1, "CCSD CME");
 
23
    dpd_buf4_init(&RMnEf, CC3_MISC, C_irr, 0, 5, 0, 5, 0, "CCSD CMnEf");
 
24
  }
 
25
  else if (params.eom_ref == 1) {
 
26
    dpd_file2_init(&RME, CC3_MISC, C_irr, 0, 1, "CCSD CME");
 
27
    dpd_file2_init(&Rme, CC3_MISC, C_irr, 0, 1, "CCSD Cme");
 
28
    dpd_buf4_init(&RMNEF, CC3_MISC, C_irr, 2, 7, 2, 7, 0, "CCSD CMNEF");
 
29
    dpd_buf4_init(&Rmnef, CC3_MISC, C_irr, 2, 7, 2, 7, 0, "CCSD Cmnef");
 
30
    dpd_buf4_init(&RMnEf, CC3_MISC, C_irr, 0, 5, 0, 5, 0, "CCSD CMnEf");
 
31
  }
 
32
  else if (params.eom_ref == 2) {
 
33
    dpd_file2_init(&RME, CC3_MISC, C_irr, 0, 1, "CCSD CME");
 
34
    dpd_file2_init(&Rme, CC3_MISC, C_irr, 2, 3, "CCSD Cme");
 
35
    dpd_buf4_init(&RMNEF, CC3_MISC, C_irr, 2, 7, 2, 7, 0, "CCSD CMNEF");
 
36
    dpd_buf4_init(&Rmnef, CC3_MISC, C_irr, 12, 17, 12, 17, 0, "CCSD Cmnef");
 
37
    dpd_buf4_init(&RMnEf, CC3_MISC, C_irr, 22, 28, 22, 28, 0, "CCSD CMnEf");
 
38
  }
 
39
 
 
40
  /* loop over trial C vectors */
 
41
  for (i=0; i<L; ++i) {
 
42
 
 
43
    /* read C vector from EOM_Cxxx */
 
44
    if (params.eom_ref == 0) {
 
45
      sprintf(lbl, "%s %d", "CME", i);
 
46
      dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl);
 
47
      sprintf(lbl, "%s %d", "CMnEf", i);
 
48
      dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl);
 
49
    }
 
50
    else if (params.eom_ref == 1) {
 
51
      sprintf(lbl, "%s %d", "CME", i);
 
52
      dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl);
 
53
      sprintf(lbl, "%s %d", "Cme", i);
 
54
      dpd_file2_init(&Cme, EOM_Cme, C_irr, 0, 1, lbl);
 
55
      sprintf(lbl, "%s %d", "CMNEF", i);
 
56
      dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl);
 
57
      sprintf(lbl, "%s %d", "Cmnef", i);
 
58
      dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 2, 7, 2, 7, 0, lbl);
 
59
      sprintf(lbl, "%s %d", "CMnEf", i);
 
60
      dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 0, 5, 0, 5, 0, lbl);
 
61
    }
 
62
    else if (params.eom_ref == 2) {
 
63
      sprintf(lbl, "%s %d", "CME", i);
 
64
      dpd_file2_init(&CME, EOM_CME, C_irr, 0, 1, lbl);
 
65
      sprintf(lbl, "%s %d", "Cme", i);
 
66
      dpd_file2_init(&Cme, EOM_Cme, C_irr, 2, 3, lbl);
 
67
      sprintf(lbl, "%s %d", "CMNEF", i);
 
68
      dpd_buf4_init(&CMNEF, EOM_CMNEF, C_irr, 2, 7, 2, 7, 0, lbl);
 
69
      sprintf(lbl, "%s %d", "Cmnef", i);
 
70
      dpd_buf4_init(&Cmnef, EOM_Cmnef, C_irr, 12, 17, 12, 17, 0, lbl);
 
71
      sprintf(lbl, "%s %d", "CMnEf", i);
 
72
      dpd_buf4_init(&CMnEf, EOM_CMnEf, C_irr, 22, 28, 22, 28, 0, lbl);
 
73
    }
 
74
 
 
75
    /* dot C vector with R vector */
 
76
    tval = 0.0;
 
77
    if (params.eom_ref == 0) {
 
78
      tval = 2.0 * dpd_file2_dot(&CME, &RME);
 
79
      tval += dpd_buf4_dot(&CMnEf, &RMnEf);
 
80
    }
 
81
    else if (params.eom_ref == 1) {
 
82
      tval = dpd_file2_dot(&CME, &RME);
 
83
      tval += dpd_file2_dot(&Cme, &Rme);
 
84
      tval += dpd_buf4_dot(&CMNEF, &RMNEF);
 
85
      tval += dpd_buf4_dot(&Cmnef, &Rmnef);
 
86
      tval += dpd_buf4_dot(&CMnEf, &RMnEf);
 
87
    }
 
88
    else if (params.eom_ref == 2) {
 
89
      tval = dpd_file2_dot(&CME, &RME);
 
90
      tval += dpd_file2_dot(&Cme, &Rme);
 
91
      tval += dpd_buf4_dot(&CMNEF, &RMNEF);
 
92
      tval += dpd_buf4_dot(&Cmnef, &Rmnef);
 
93
      tval += dpd_buf4_dot(&CMnEf, &RMnEf);
 
94
    }
 
95
 
 
96
    /* loop over roots and add in overlap */
 
97
    for (j=0; j<L; ++j)
 
98
      CR_overlap[j] += alpha[i][j] * tval;
 
99
 
 
100
    if (params.eom_ref == 0) {
 
101
      dpd_file2_close(&CME);
 
102
      dpd_buf4_close(&CMnEf);
 
103
    }
 
104
    else {
 
105
      dpd_file2_close(&CME);
 
106
      dpd_file2_close(&Cme);
 
107
      dpd_buf4_close(&CMNEF);
 
108
      dpd_buf4_close(&Cmnef);
 
109
      dpd_buf4_close(&CMnEf);
 
110
    }
 
111
  }
 
112
 
 
113
  if (params.eom_ref == 0) {
 
114
    dpd_file2_close(&RME);
 
115
    dpd_buf4_close(&RMnEf);
 
116
  } 
 
117
  else {
 
118
    dpd_file2_close(&RME);
 
119
    dpd_file2_close(&Rme);
 
120
    dpd_buf4_close(&RMNEF);
 
121
    dpd_buf4_close(&Rmnef);
 
122
    dpd_buf4_close(&RMnEf);
 
123
  }
 
124
 
 
125
  fprintf(outfile,"Overlaps of Rs with EOM CCSD eigenvector:\n");
 
126
  for(i=0;i<L;++i) {
 
127
    fprintf(outfile,"\t %d  %12.6lf\n", i, CR_overlap[i]);
 
128
  }
 
129
 
 
130
  /* return index with greatest overlap */
 
131
  tval = -1.0;
 
132
 
 
133
  for(i=0;i<L;++i) {
 
134
    if ( fabs(CR_overlap[i]) > tval) {
 
135
      tval = fabs(CR_overlap[i]);
 
136
      j = i;
 
137
    }
 
138
  }
 
139
 
 
140
  fprintf(outfile,"follow_root returning: %d\n", j);
 
141
  return j;
 
142
}