~ubuntu-branches/ubuntu/quantal/psicode/quantal

« back to all changes in this revision

Viewing changes to src/bin/cints/Tools/quartet_data.c

  • Committer: Bazaar Package Importer
  • Author(s): Michael Banck
  • Date: 2006-09-10 14:01:33 UTC
  • Revision ID: james.westby@ubuntu.com-20060910140133-ib2j86trekykfsfv
Tags: upstream-3.2.3
ImportĀ upstreamĀ versionĀ 3.2.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include<math.h>
 
2
#include<stdio.h>
 
3
#include<string.h>
 
4
#include<memory.h>
 
5
#include<stdlib.h>
 
6
#include<libint/libint.h>
 
7
 
 
8
#include"defines.h"
 
9
#define EXTERN
 
10
#include"global.h"
 
11
#ifdef USE_TAYLOR_FM
 
12
  #include"taylor_fm_eval.h"
 
13
#else
 
14
  #include"int_fjt.h"
 
15
#endif
 
16
 
 
17
/*--------------------------------------------------------------------------------
 
18
  This function computes constants used in OSRR for a given quartet of primitives
 
19
 --------------------------------------------------------------------------------*/
 
20
void quartet_data(prim_data *Data, double_array_t *fjt_table, double AB2, double CD2,
 
21
                  struct shell_pair *sp1, struct shell_pair *sp2, 
 
22
                  int am, int pi, int pj, int pk, int pl, double scale)
 
23
{
 
24
#define STATIC_OO2NP1
 
25
#include "static.h"
 
26
 
 
27
  /*----------------
 
28
    Local variables
 
29
   ----------------*/
 
30
  struct coordinates PQ, W;
 
31
#ifdef USE_TAYLOR_FM
 
32
  double F[4*CINTS_MAX_AM];
 
33
#endif
 
34
  int i;
 
35
  double small_T = UserOptions.cutoff;       /*--- Use only one term in Taylor expansion of Fj(T) if T < small_T ---*/
 
36
  double T;
 
37
  double coef1;
 
38
  double PQ2;
 
39
  double oozn;
 
40
  double zeta, eta, rho;
 
41
 
 
42
  zeta = sp1->gamma[pi][pj];
 
43
  eta = sp2->gamma[pk][pl];
 
44
  oozn = 1.0/(zeta+eta);
 
45
  Data->poz = eta*oozn;
 
46
  rho = zeta*Data->poz;
 
47
  coef1 = 2.0*sqrt(rho*M_1_PI)*scale*sp1->Sovlp[pi][pj]*sp2->Sovlp[pk][pl];
 
48
  PQ.x = sp1->P[pi][pj][0] - sp2->P[pk][pl][0];
 
49
  PQ.y = sp1->P[pi][pj][1] - sp2->P[pk][pl][1];
 
50
  PQ.z = sp1->P[pi][pj][2] - sp2->P[pk][pl][2];
 
51
  PQ2 = PQ.x*PQ.x;
 
52
  PQ2 += PQ.y*PQ.y;
 
53
  PQ2 += PQ.z*PQ.z;
 
54
  T = rho*PQ2;
 
55
 
 
56
  if (!am) {
 
57
#ifdef USE_TAYLOR_FM
 
58
    taylor_compute_fm(F,T,0);
 
59
    Data->F[0] = F[0]*coef1;
 
60
#else
 
61
    int_fjt(fjt_table,0,T);
 
62
    Data->F[0] = fjt_table->d[0]*coef1;
 
63
#endif
 
64
  }
 
65
  else {
 
66
    Data->oo2zn = 0.5*oozn;
 
67
    Data->pon = zeta*oozn;
 
68
    Data->oo2z = 0.5/zeta;
 
69
    Data->oo2n = 0.5/eta;
 
70
    W.x = (sp1->P[pi][pj][0]*zeta+sp2->P[pk][pl][0]*eta)*oozn;
 
71
    W.y = (sp1->P[pi][pj][1]*zeta+sp2->P[pk][pl][1]*eta)*oozn;
 
72
    W.z = (sp1->P[pi][pj][2]*zeta+sp2->P[pk][pl][2]*eta)*oozn;
 
73
 
 
74
    if(T < small_T){ 
 
75
      for(i=0; i<=am; i++) 
 
76
        Data->F[i] = oo2np1[i]*coef1;
 
77
    }
 
78
    else {
 
79
#ifdef USE_TAYLOR_FM
 
80
      taylor_compute_fm(F,T,am);
 
81
      for(i=0;i<=am;i++)
 
82
        Data->F[i] = F[i]*coef1;
 
83
#else
 
84
      int_fjt(fjt_table,am,T);
 
85
      for(i=0;i<=am;i++)
 
86
        Data->F[i] = fjt_table->d[i]*coef1;
 
87
#endif
 
88
    }
 
89
 
 
90
    /* PA */
 
91
    Data->U[0][0] = sp1->PA[pi][pj][0];
 
92
    Data->U[0][1] = sp1->PA[pi][pj][1];
 
93
    Data->U[0][2] = sp1->PA[pi][pj][2];
 
94
    /* QC */
 
95
    Data->U[2][0] = sp2->PA[pk][pl][0];
 
96
    Data->U[2][1] = sp2->PA[pk][pl][1];
 
97
    Data->U[2][2] = sp2->PA[pk][pl][2];
 
98
    /* WP */
 
99
    Data->U[4][0] = W.x - sp1->P[pi][pj][0];
 
100
    Data->U[4][1] = W.y - sp1->P[pi][pj][1];
 
101
    Data->U[4][2] = W.z - sp1->P[pi][pj][2];
 
102
    /* WQ */
 
103
    Data->U[5][0] = W.x - sp2->P[pk][pl][0];
 
104
    Data->U[5][1] = W.y - sp2->P[pk][pl][1];
 
105
    Data->U[5][2] = W.z - sp2->P[pk][pl][2];
 
106
  }
 
107
 
 
108
  return;
 
109
}
 
110
 
 
111