1
/*! \file quartet_data.cc
3
\brief Enter brief description of file here
10
#include<libint/libint.h>
17
#include"taylor_fm_eval.h"
22
namespace psi { namespace CINTS {
24
/*!--------------------------------------------------------------------------------
25
This function computes constants used in OSRR for a given quartet of primitives
26
--------------------------------------------------------------------------------*/
27
void quartet_data(prim_data *Data, double_array_t *fjt_table, double AB2, double CD2,
28
struct shell_pair *sp1, struct shell_pair *sp2,
29
int am, int pi, int pj, int pk, int pl, double scale)
37
struct coordinates PQ, W;
39
double F[4*CINTS_MAX_AM];
42
double small_T = UserOptions.cutoff; /*--- Use only one term in Taylor expansion of Fj(T) if T < small_T ---*/
47
double zeta, eta, rho;
49
zeta = sp1->gamma[pi][pj];
50
eta = sp2->gamma[pk][pl];
51
oozn = 1.0/(zeta+eta);
54
coef1 = 2.0*sqrt(rho*M_1_PI)*scale*sp1->Sovlp[pi][pj]*sp2->Sovlp[pk][pl];
55
PQ.x = sp1->P[pi][pj][0] - sp2->P[pk][pl][0];
56
PQ.y = sp1->P[pi][pj][1] - sp2->P[pk][pl][1];
57
PQ.z = sp1->P[pi][pj][2] - sp2->P[pk][pl][2];
65
taylor_compute_fm(F,T,0);
66
Data->F[0] = F[0]*coef1;
68
int_fjt(fjt_table,0,T);
69
Data->F[0] = fjt_table->d[0]*coef1;
73
Data->oo2zn = 0.5*oozn;
74
Data->pon = zeta*oozn;
75
Data->oo2z = 0.5/zeta;
77
W.x = (sp1->P[pi][pj][0]*zeta+sp2->P[pk][pl][0]*eta)*oozn;
78
W.y = (sp1->P[pi][pj][1]*zeta+sp2->P[pk][pl][1]*eta)*oozn;
79
W.z = (sp1->P[pi][pj][2]*zeta+sp2->P[pk][pl][2]*eta)*oozn;
83
Data->F[i] = oo2np1[i]*coef1;
87
taylor_compute_fm(F,T,am);
89
Data->F[i] = F[i]*coef1;
91
int_fjt(fjt_table,am,T);
93
Data->F[i] = fjt_table->d[i]*coef1;
98
Data->U[0][0] = sp1->PA[pi][pj][0];
99
Data->U[0][1] = sp1->PA[pi][pj][1];
100
Data->U[0][2] = sp1->PA[pi][pj][2];
102
Data->U[2][0] = sp2->PA[pk][pl][0];
103
Data->U[2][1] = sp2->PA[pk][pl][1];
104
Data->U[2][2] = sp2->PA[pk][pl][2];
106
Data->U[4][0] = W.x - sp1->P[pi][pj][0];
107
Data->U[4][1] = W.y - sp1->P[pi][pj][1];
108
Data->U[4][2] = W.z - sp1->P[pi][pj][2];
110
Data->U[5][0] = W.x - sp2->P[pk][pl][0];
111
Data->U[5][1] = W.y - sp2->P[pk][pl][1];
112
Data->U[5][2] = W.z - sp2->P[pk][pl][2];