4
#include <libint/libint.h>
7
extern void punt(char *);
8
static int hash(int a[2][3], int b[2]);
10
REALTYPE *r_vrr_build_xxxx(int am_in[2], prim_data *Data, REALTYPE *vp, const REALTYPE *i0, const REALTYPE *i1, REALTYPE *i2,
11
const REALTYPE *i3, const REALTYPE *i4, const REALTYPE *i5)
17
int t1, t2, t3, t4, t2max;
20
REALTYPE PA[3], U1[3], loo4zn, loo2z, loo2p, r12int;
21
static int io[] = {0,1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153};
25
loo4zn = Data->oo2z*Data->oo2n;
27
if (la == 0) { /*--- Decrement on C ---*/
30
PA[0] = Data->U[2][0];
31
PA[1] = Data->U[2][1];
32
PA[2] = Data->U[2][2];
33
U1[0] = Data->U[2][0]*Data->oo2z + Data->U[3][0]*Data->oo2n;
34
U1[1] = Data->U[2][1]*Data->oo2z + Data->U[3][1]*Data->oo2n;
35
U1[2] = Data->U[2][2]*Data->oo2z + Data->U[3][2]*Data->oo2n;
38
else { /*--- Decrement on A ---*/
40
t2max = io[la]*io[lc+1];
41
PA[0] = Data->U[0][0];
42
PA[1] = Data->U[0][1];
43
PA[2] = Data->U[0][2];
44
U1[0] = Data->U[0][0]*Data->oo2n + Data->U[1][0]*Data->oo2z;
45
U1[1] = Data->U[0][1]*Data->oo2n + Data->U[1][1]*Data->oo2z;
46
U1[2] = Data->U[0][2]*Data->oo2n + Data->U[1][2]*Data->oo2z;
52
for(i = 0; i <= la; i++){
54
for(j = 0; j <= i; j++){
58
for(k = 0; k <= lc; k++){
60
for(l = 0; l <= k; l++){
69
/*--- reset indices (read Justin Fermann's thesis, pp 36-41 ---*/
70
/*--- (a-1,0|c0) ---*/
71
am[a][xyz] = am[a][xyz] - 1;
72
am_in[a] = am_in[a] - 1;
75
/*--- (a-2,0|c0) ---*/
77
am[a][xyz] = am[a][xyz] - 1;
78
am_in[a] = am_in[a] - 1;
80
am[a][xyz] = am[a][xyz] + 1;
81
am_in[a] = am_in[a] + 1;
84
/*--- (a-1,0|c-1,0) ---*/
86
am[a^1][0] = am[a^1][0] - 1;
87
am_in[a^1] = am_in[a^1] - 1;
89
am[a^1][0] = am[a^1][0] + 1;
90
am_in[a^1] = am_in[a^1] + 1;
93
am[a][xyz] = am[a][xyz] + 1;
94
am_in[a] = am_in[a] + 1;
96
r12int = PA[xyz]*i0[t2] - U1[xyz]*i3[t2] + loo2p*(*i2);
99
r12int += (am[a][xyz]-1)*(loo2z*i1[t3] - loo4zn*i4[t3]);
102
if(am[a^1][xyz] > 0){
103
r12int -= am[a^1][xyz]*loo4zn*i5[t4];
124
static int io[] = {0,1,3,6,10,15,21,28,36,45,55,66,78,91,105,120,136,153};
128
c[0]=i+io[i]-a[0][1];
132
c[1]=i+io[i]-a[1][1];
135
return c[0]*io[b[1]+1]+c[1];