1 #include "simint/boys/boys.h"
2 #include "simint/ostei/gen/ostei_generated.h"
3 #include "simint/vectorization/vectorization.h"
4 #include <math.h>
5 #include <string.h>
6 
7 
ostei_k_g_g_f(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__k_g_g_f)8 int ostei_k_g_g_f(struct simint_multi_shellpair const P,
9                   struct simint_multi_shellpair const Q,
10                   double screen_tol,
11                   double * const restrict work,
12                   double * const restrict INT__k_g_g_f)
13 {
14 
15     SIMINT_ASSUME_ALIGN_DBL(work);
16     SIMINT_ASSUME_ALIGN_DBL(INT__k_g_g_f);
17     int ab, cd, abcd;
18     int istart, jstart;
19     int iprimcd, nprim_icd, icd;
20     const int check_screen = (screen_tol > 0.0);
21     int i, j;
22     int n;
23     int not_screened;
24     int real_abcd;
25     int iket;
26     int ibra;
27 
28     // partition workspace
29     double * const INT__k_s_g_s = work + (SIMINT_NSHELL_SIMD * 0);
30     double * const INT__k_s_h_s = work + (SIMINT_NSHELL_SIMD * 540);
31     double * const INT__k_s_i_s = work + (SIMINT_NSHELL_SIMD * 1296);
32     double * const INT__k_s_k_s = work + (SIMINT_NSHELL_SIMD * 2304);
33     double * const INT__l_s_g_s = work + (SIMINT_NSHELL_SIMD * 3600);
34     double * const INT__l_s_h_s = work + (SIMINT_NSHELL_SIMD * 4275);
35     double * const INT__l_s_i_s = work + (SIMINT_NSHELL_SIMD * 5220);
36     double * const INT__l_s_k_s = work + (SIMINT_NSHELL_SIMD * 6480);
37     double * const INT__m_s_g_s = work + (SIMINT_NSHELL_SIMD * 8100);
38     double * const INT__m_s_h_s = work + (SIMINT_NSHELL_SIMD * 8925);
39     double * const INT__m_s_i_s = work + (SIMINT_NSHELL_SIMD * 10080);
40     double * const INT__m_s_k_s = work + (SIMINT_NSHELL_SIMD * 11620);
41     double * const INT__n_s_g_s = work + (SIMINT_NSHELL_SIMD * 13600);
42     double * const INT__n_s_h_s = work + (SIMINT_NSHELL_SIMD * 14590);
43     double * const INT__n_s_i_s = work + (SIMINT_NSHELL_SIMD * 15976);
44     double * const INT__n_s_k_s = work + (SIMINT_NSHELL_SIMD * 17824);
45     double * const INT__o_s_g_s = work + (SIMINT_NSHELL_SIMD * 20200);
46     double * const INT__o_s_h_s = work + (SIMINT_NSHELL_SIMD * 21370);
47     double * const INT__o_s_i_s = work + (SIMINT_NSHELL_SIMD * 23008);
48     double * const INT__o_s_k_s = work + (SIMINT_NSHELL_SIMD * 25192);
49     SIMINT_DBLTYPE * const primwork = (SIMINT_DBLTYPE *)(work + SIMINT_NSHELL_SIMD*28000);
50     SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_s_s = primwork + 0;
51     SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_s_s = primwork + 19;
52     SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_p_s = primwork + 73;
53     SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_s_s = primwork + 136;
54     SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_p_s = primwork + 238;
55     SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_d_s = primwork + 364;
56     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_s_s = primwork + 580;
57     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_p_s = primwork + 740;
58     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_d_s = primwork + 950;
59     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_f_s = primwork + 1310;
60     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_s_s = primwork + 1810;
61     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_p_s = primwork + 2035;
62     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_d_s = primwork + 2350;
63     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_f_s = primwork + 2890;
64     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_g_s = primwork + 3640;
65     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_s_s = primwork + 4540;
66     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_p_s = primwork + 4834;
67     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_d_s = primwork + 5275;
68     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_f_s = primwork + 6031;
69     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_g_s = primwork + 7081;
70     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_h_s = primwork + 8341;
71     SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_s_s = primwork + 9664;
72     SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_p_s = primwork + 10028;
73     SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_d_s = primwork + 10616;
74     SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_f_s = primwork + 11624;
75     SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_g_s = primwork + 13024;
76     SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_h_s = primwork + 14704;
77     SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_i_s = primwork + 16468;
78     SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_s_s = primwork + 18036;
79     SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_p_s = primwork + 18468;
80     SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_d_s = primwork + 19224;
81     SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_f_s = primwork + 20520;
82     SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_g_s = primwork + 22320;
83     SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_h_s = primwork + 24480;
84     SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_i_s = primwork + 26748;
85     SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_k_s = primwork + 28764;
86     SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_s_s = primwork + 30060;
87     SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_p_s = primwork + 30555;
88     SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_d_s = primwork + 31500;
89     SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_f_s = primwork + 33120;
90     SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_g_s = primwork + 35370;
91     SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_h_s = primwork + 38070;
92     SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_i_s = primwork + 40905;
93     SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_k_s = primwork + 43425;
94     SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_s_s = primwork + 45045;
95     SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_p_s = primwork + 45595;
96     SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_d_s = primwork + 46750;
97     SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_f_s = primwork + 48730;
98     SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_g_s = primwork + 51480;
99     SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_h_s = primwork + 54780;
100     SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_i_s = primwork + 58245;
101     SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_k_s = primwork + 61325;
102     SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_s_s = primwork + 63305;
103     SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_p_s = primwork + 63899;
104     SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_d_s = primwork + 65285;
105     SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_f_s = primwork + 67661;
106     SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_g_s = primwork + 70961;
107     SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_h_s = primwork + 74921;
108     SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_i_s = primwork + 79079;
109     SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_k_s = primwork + 82775;
110     SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_s_s = primwork + 85151;
111     SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_p_s = primwork + 85775;
112     SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_d_s = primwork + 87413;
113     SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_f_s = primwork + 90221;
114     SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_g_s = primwork + 94121;
115     SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_h_s = primwork + 98801;
116     SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_i_s = primwork + 103715;
117     SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_k_s = primwork + 108083;
118     double * const hrrwork = (double *)(primwork + 110891);
119     double * const HRR_INT__k_p_g_s = hrrwork + 0;
120     double * const HRR_INT__k_p_h_s = hrrwork + 1620;
121     double * const HRR_INT__k_p_i_s = hrrwork + 3888;
122     double * const HRR_INT__k_p_k_s = hrrwork + 6912;
123     double * const HRR_INT__k_d_g_s = hrrwork + 10800;
124     double * const HRR_INT__k_d_h_s = hrrwork + 14040;
125     double * const HRR_INT__k_d_i_s = hrrwork + 18576;
126     double * const HRR_INT__k_d_k_s = hrrwork + 24624;
127     double * const HRR_INT__k_f_g_s = hrrwork + 32400;
128     double * const HRR_INT__k_f_h_s = hrrwork + 37800;
129     double * const HRR_INT__k_f_i_s = hrrwork + 45360;
130     double * const HRR_INT__k_f_k_s = hrrwork + 55440;
131     double * const HRR_INT__k_g_g_s = hrrwork + 68400;
132     double * const HRR_INT__k_g_g_p = hrrwork + 76500;
133     double * const HRR_INT__k_g_g_d = hrrwork + 100800;
134     double * const HRR_INT__k_g_h_s = hrrwork + 149400;
135     double * const HRR_INT__k_g_h_p = hrrwork + 160740;
136     double * const HRR_INT__k_g_h_d = hrrwork + 194760;
137     double * const HRR_INT__k_g_i_s = hrrwork + 262800;
138     double * const HRR_INT__k_g_i_p = hrrwork + 277920;
139     double * const HRR_INT__k_g_k_s = hrrwork + 323280;
140     double * const HRR_INT__l_p_g_s = hrrwork + 342720;
141     double * const HRR_INT__l_p_h_s = hrrwork + 344745;
142     double * const HRR_INT__l_p_i_s = hrrwork + 347580;
143     double * const HRR_INT__l_p_k_s = hrrwork + 351360;
144     double * const HRR_INT__l_d_g_s = hrrwork + 356220;
145     double * const HRR_INT__l_d_h_s = hrrwork + 360270;
146     double * const HRR_INT__l_d_i_s = hrrwork + 365940;
147     double * const HRR_INT__l_d_k_s = hrrwork + 373500;
148     double * const HRR_INT__l_f_g_s = hrrwork + 383220;
149     double * const HRR_INT__l_f_h_s = hrrwork + 389970;
150     double * const HRR_INT__l_f_i_s = hrrwork + 399420;
151     double * const HRR_INT__l_f_k_s = hrrwork + 412020;
152     double * const HRR_INT__m_p_g_s = hrrwork + 428220;
153     double * const HRR_INT__m_p_h_s = hrrwork + 430695;
154     double * const HRR_INT__m_p_i_s = hrrwork + 434160;
155     double * const HRR_INT__m_p_k_s = hrrwork + 438780;
156     double * const HRR_INT__m_d_g_s = hrrwork + 444720;
157     double * const HRR_INT__m_d_h_s = hrrwork + 449670;
158     double * const HRR_INT__m_d_i_s = hrrwork + 456600;
159     double * const HRR_INT__m_d_k_s = hrrwork + 465840;
160     double * const HRR_INT__n_p_g_s = hrrwork + 477720;
161     double * const HRR_INT__n_p_h_s = hrrwork + 480690;
162     double * const HRR_INT__n_p_i_s = hrrwork + 484848;
163     double * const HRR_INT__n_p_k_s = hrrwork + 490392;
164 
165 
166     // Create constants
167     const SIMINT_DBLTYPE const_1 = SIMINT_DBLSET1(1);
168     const SIMINT_DBLTYPE const_10 = SIMINT_DBLSET1(10);
169     const SIMINT_DBLTYPE const_11 = SIMINT_DBLSET1(11);
170     const SIMINT_DBLTYPE const_2 = SIMINT_DBLSET1(2);
171     const SIMINT_DBLTYPE const_3 = SIMINT_DBLSET1(3);
172     const SIMINT_DBLTYPE const_4 = SIMINT_DBLSET1(4);
173     const SIMINT_DBLTYPE const_5 = SIMINT_DBLSET1(5);
174     const SIMINT_DBLTYPE const_6 = SIMINT_DBLSET1(6);
175     const SIMINT_DBLTYPE const_7 = SIMINT_DBLSET1(7);
176     const SIMINT_DBLTYPE const_8 = SIMINT_DBLSET1(8);
177     const SIMINT_DBLTYPE const_9 = SIMINT_DBLSET1(9);
178     const SIMINT_DBLTYPE one_half = SIMINT_DBLSET1(0.5);
179 
180 
181     ////////////////////////////////////////
182     // Loop over shells and primitives
183     ////////////////////////////////////////
184 
185     real_abcd = 0;
186     istart = 0;
187     for(ab = 0; ab < P.nshell12_clip; ++ab)
188     {
189         const int iend = istart + P.nprim12[ab];
190 
191         cd = 0;
192         jstart = 0;
193 
194         for(cd = 0; cd < Q.nshell12_clip; cd += SIMINT_NSHELL_SIMD)
195         {
196             const int nshellbatch = ((cd + SIMINT_NSHELL_SIMD) > Q.nshell12_clip) ? Q.nshell12_clip - cd : SIMINT_NSHELL_SIMD;
197             int jend = jstart;
198             for(i = 0; i < nshellbatch; i++)
199                 jend += Q.nprim12[cd+i];
200 
201             // Clear the beginning of the workspace (where we are accumulating integrals)
202             memset(work, 0, SIMINT_NSHELL_SIMD * 28000 * sizeof(double));
203             abcd = 0;
204 
205 
206             for(i = istart; i < iend; ++i)
207             {
208                 SIMINT_DBLTYPE bra_screen_max;  // only used if check_screen
209 
210                 if(check_screen)
211                 {
212                     // Skip this whole thing if always insignificant
213                     if((P.screen[i] * Q.screen_max) < screen_tol)
214                         continue;
215                     bra_screen_max = SIMINT_DBLSET1(P.screen[i]);
216                 }
217 
218                 icd = 0;
219                 iprimcd = 0;
220                 nprim_icd = Q.nprim12[cd];
221                 double * restrict PRIM_PTR_INT__k_s_g_s = INT__k_s_g_s + abcd * 540;
222                 double * restrict PRIM_PTR_INT__k_s_h_s = INT__k_s_h_s + abcd * 756;
223                 double * restrict PRIM_PTR_INT__k_s_i_s = INT__k_s_i_s + abcd * 1008;
224                 double * restrict PRIM_PTR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
225                 double * restrict PRIM_PTR_INT__l_s_g_s = INT__l_s_g_s + abcd * 675;
226                 double * restrict PRIM_PTR_INT__l_s_h_s = INT__l_s_h_s + abcd * 945;
227                 double * restrict PRIM_PTR_INT__l_s_i_s = INT__l_s_i_s + abcd * 1260;
228                 double * restrict PRIM_PTR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
229                 double * restrict PRIM_PTR_INT__m_s_g_s = INT__m_s_g_s + abcd * 825;
230                 double * restrict PRIM_PTR_INT__m_s_h_s = INT__m_s_h_s + abcd * 1155;
231                 double * restrict PRIM_PTR_INT__m_s_i_s = INT__m_s_i_s + abcd * 1540;
232                 double * restrict PRIM_PTR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
233                 double * restrict PRIM_PTR_INT__n_s_g_s = INT__n_s_g_s + abcd * 990;
234                 double * restrict PRIM_PTR_INT__n_s_h_s = INT__n_s_h_s + abcd * 1386;
235                 double * restrict PRIM_PTR_INT__n_s_i_s = INT__n_s_i_s + abcd * 1848;
236                 double * restrict PRIM_PTR_INT__n_s_k_s = INT__n_s_k_s + abcd * 2376;
237                 double * restrict PRIM_PTR_INT__o_s_g_s = INT__o_s_g_s + abcd * 1170;
238                 double * restrict PRIM_PTR_INT__o_s_h_s = INT__o_s_h_s + abcd * 1638;
239                 double * restrict PRIM_PTR_INT__o_s_i_s = INT__o_s_i_s + abcd * 2184;
240                 double * restrict PRIM_PTR_INT__o_s_k_s = INT__o_s_k_s + abcd * 2808;
241 
242 
243 
244                 // Load these one per loop over i
245                 const SIMINT_DBLTYPE P_alpha = SIMINT_DBLSET1(P.alpha[i]);
246                 const SIMINT_DBLTYPE P_prefac = SIMINT_DBLSET1(P.prefac[i]);
247                 const SIMINT_DBLTYPE Pxyz[3] = { SIMINT_DBLSET1(P.x[i]), SIMINT_DBLSET1(P.y[i]), SIMINT_DBLSET1(P.z[i]) };
248 
249                 const SIMINT_DBLTYPE P_PA[3] = { SIMINT_DBLSET1(P.PA_x[i]), SIMINT_DBLSET1(P.PA_y[i]), SIMINT_DBLSET1(P.PA_z[i]) };
250 
251                 for(j = jstart; j < jend; j += SIMINT_SIMD_LEN)
252                 {
253                     // calculate the shell offsets
254                     // these are the offset from the shell pointed to by cd
255                     // for each element
256                     int shelloffsets[SIMINT_SIMD_LEN] = {0};
257                     int lastoffset = 0;
258                     const int nlane = ( ((j + SIMINT_SIMD_LEN) < jend) ? SIMINT_SIMD_LEN : (jend - j));
259 
260                     if((iprimcd + SIMINT_SIMD_LEN) >= nprim_icd)
261                     {
262                         // Handle if the first element of the vector is a new shell
263                         if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
264                         {
265                             nprim_icd += Q.nprim12[cd + (++icd)];
266                             PRIM_PTR_INT__k_s_g_s += 540;
267                             PRIM_PTR_INT__k_s_h_s += 756;
268                             PRIM_PTR_INT__k_s_i_s += 1008;
269                             PRIM_PTR_INT__k_s_k_s += 1296;
270                             PRIM_PTR_INT__l_s_g_s += 675;
271                             PRIM_PTR_INT__l_s_h_s += 945;
272                             PRIM_PTR_INT__l_s_i_s += 1260;
273                             PRIM_PTR_INT__l_s_k_s += 1620;
274                             PRIM_PTR_INT__m_s_g_s += 825;
275                             PRIM_PTR_INT__m_s_h_s += 1155;
276                             PRIM_PTR_INT__m_s_i_s += 1540;
277                             PRIM_PTR_INT__m_s_k_s += 1980;
278                             PRIM_PTR_INT__n_s_g_s += 990;
279                             PRIM_PTR_INT__n_s_h_s += 1386;
280                             PRIM_PTR_INT__n_s_i_s += 1848;
281                             PRIM_PTR_INT__n_s_k_s += 2376;
282                             PRIM_PTR_INT__o_s_g_s += 1170;
283                             PRIM_PTR_INT__o_s_h_s += 1638;
284                             PRIM_PTR_INT__o_s_i_s += 2184;
285                             PRIM_PTR_INT__o_s_k_s += 2808;
286                         }
287                         iprimcd++;
288                         for(n = 1; n < SIMINT_SIMD_LEN; ++n)
289                         {
290                             if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
291                             {
292                                 shelloffsets[n] = shelloffsets[n-1] + 1;
293                                 lastoffset++;
294                                 nprim_icd += Q.nprim12[cd + (++icd)];
295                             }
296                             else
297                                 shelloffsets[n] = shelloffsets[n-1];
298                             iprimcd++;
299                         }
300                     }
301                     else
302                         iprimcd += SIMINT_SIMD_LEN;
303 
304                     // Do we have to compute this vector (or has it been screened out)?
305                     // (not_screened != 0 means we have to do this vector)
306                     if(check_screen)
307                     {
308                         const double vmax = vector_max(SIMINT_MUL(bra_screen_max, SIMINT_DBLLOAD(Q.screen, j)));
309                         if(vmax < screen_tol)
310                         {
311                             PRIM_PTR_INT__k_s_g_s += lastoffset*540;
312                             PRIM_PTR_INT__k_s_h_s += lastoffset*756;
313                             PRIM_PTR_INT__k_s_i_s += lastoffset*1008;
314                             PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
315                             PRIM_PTR_INT__l_s_g_s += lastoffset*675;
316                             PRIM_PTR_INT__l_s_h_s += lastoffset*945;
317                             PRIM_PTR_INT__l_s_i_s += lastoffset*1260;
318                             PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
319                             PRIM_PTR_INT__m_s_g_s += lastoffset*825;
320                             PRIM_PTR_INT__m_s_h_s += lastoffset*1155;
321                             PRIM_PTR_INT__m_s_i_s += lastoffset*1540;
322                             PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
323                             PRIM_PTR_INT__n_s_g_s += lastoffset*990;
324                             PRIM_PTR_INT__n_s_h_s += lastoffset*1386;
325                             PRIM_PTR_INT__n_s_i_s += lastoffset*1848;
326                             PRIM_PTR_INT__n_s_k_s += lastoffset*2376;
327                             PRIM_PTR_INT__o_s_g_s += lastoffset*1170;
328                             PRIM_PTR_INT__o_s_h_s += lastoffset*1638;
329                             PRIM_PTR_INT__o_s_i_s += lastoffset*2184;
330                             PRIM_PTR_INT__o_s_k_s += lastoffset*2808;
331                             continue;
332                         }
333                     }
334 
335                     const SIMINT_DBLTYPE Q_alpha = SIMINT_DBLLOAD(Q.alpha, j);
336                     const SIMINT_DBLTYPE PQalpha_mul = SIMINT_MUL(P_alpha, Q_alpha);
337                     const SIMINT_DBLTYPE PQalpha_sum = SIMINT_ADD(P_alpha, Q_alpha);
338                     const SIMINT_DBLTYPE one_over_PQalpha_sum = SIMINT_DIV(const_1, PQalpha_sum);
339 
340 
341                     /* construct R2 = (Px - Qx)**2 + (Py - Qy)**2 + (Pz -Qz)**2 */
342                     SIMINT_DBLTYPE PQ[3];
343                     PQ[0] = SIMINT_SUB(Pxyz[0], SIMINT_DBLLOAD(Q.x, j));
344                     PQ[1] = SIMINT_SUB(Pxyz[1], SIMINT_DBLLOAD(Q.y, j));
345                     PQ[2] = SIMINT_SUB(Pxyz[2], SIMINT_DBLLOAD(Q.z, j));
346                     SIMINT_DBLTYPE R2 = SIMINT_MUL(PQ[0], PQ[0]);
347                     R2 = SIMINT_FMADD(PQ[1], PQ[1], R2);
348                     R2 = SIMINT_FMADD(PQ[2], PQ[2], R2);
349 
350                     const SIMINT_DBLTYPE alpha = SIMINT_MUL(PQalpha_mul, one_over_PQalpha_sum); // alpha from MEST
351                     const SIMINT_DBLTYPE one_over_p = SIMINT_DIV(const_1, P_alpha);
352                     const SIMINT_DBLTYPE one_over_q = SIMINT_DIV(const_1, Q_alpha);
353                     const SIMINT_DBLTYPE one_over_2p = SIMINT_MUL(one_half, one_over_p);
354                     const SIMINT_DBLTYPE one_over_2q = SIMINT_MUL(one_half, one_over_q);
355                     const SIMINT_DBLTYPE one_over_2pq = SIMINT_MUL(one_half, one_over_PQalpha_sum);
356                     const SIMINT_DBLTYPE Q_PA[3] = { SIMINT_DBLLOAD(Q.PA_x, j), SIMINT_DBLLOAD(Q.PA_y, j), SIMINT_DBLLOAD(Q.PA_z, j) };
357 
358                     // NOTE: Minus sign!
359                     const SIMINT_DBLTYPE a_over_p = SIMINT_MUL(SIMINT_NEG(alpha), one_over_p);
360                     SIMINT_DBLTYPE aop_PQ[3];
361                     aop_PQ[0] = SIMINT_MUL(a_over_p, PQ[0]);
362                     aop_PQ[1] = SIMINT_MUL(a_over_p, PQ[1]);
363                     aop_PQ[2] = SIMINT_MUL(a_over_p, PQ[2]);
364 
365                     SIMINT_DBLTYPE a_over_q = SIMINT_MUL(alpha, one_over_q);
366                     SIMINT_DBLTYPE aoq_PQ[3];
367                     aoq_PQ[0] = SIMINT_MUL(a_over_q, PQ[0]);
368                     aoq_PQ[1] = SIMINT_MUL(a_over_q, PQ[1]);
369                     aoq_PQ[2] = SIMINT_MUL(a_over_q, PQ[2]);
370                     // Put a minus sign here so we don't have to in RR routines
371                     a_over_q = SIMINT_NEG(a_over_q);
372 
373 
374                     //////////////////////////////////////////////
375                     // Fjt function section
376                     // Maximum v value: 18
377                     //////////////////////////////////////////////
378                     // The parameter to the Fjt function
379                     const SIMINT_DBLTYPE F_x = SIMINT_MUL(R2, alpha);
380 
381 
382                     const SIMINT_DBLTYPE Q_prefac = mask_load(nlane, Q.prefac + j);
383 
384 
385                     boys_F_split(PRIM_INT__s_s_s_s, F_x, 18);
386                     SIMINT_DBLTYPE prefac = SIMINT_SQRT(one_over_PQalpha_sum);
387                     prefac = SIMINT_MUL(SIMINT_MUL(P_prefac, Q_prefac), prefac);
388                     for(n = 0; n <= 18; n++)
389                         PRIM_INT__s_s_s_s[n] = SIMINT_MUL(PRIM_INT__s_s_s_s[n], prefac);
390 
391                     //////////////////////////////////////////////
392                     // Primitive integrals: Vertical recurrance
393                     //////////////////////////////////////////////
394 
395                     const SIMINT_DBLTYPE vrr_const_1_over_2p = one_over_2p;
396                     const SIMINT_DBLTYPE vrr_const_2_over_2p = SIMINT_MUL(const_2, one_over_2p);
397                     const SIMINT_DBLTYPE vrr_const_3_over_2p = SIMINT_MUL(const_3, one_over_2p);
398                     const SIMINT_DBLTYPE vrr_const_4_over_2p = SIMINT_MUL(const_4, one_over_2p);
399                     const SIMINT_DBLTYPE vrr_const_5_over_2p = SIMINT_MUL(const_5, one_over_2p);
400                     const SIMINT_DBLTYPE vrr_const_6_over_2p = SIMINT_MUL(const_6, one_over_2p);
401                     const SIMINT_DBLTYPE vrr_const_7_over_2p = SIMINT_MUL(const_7, one_over_2p);
402                     const SIMINT_DBLTYPE vrr_const_8_over_2p = SIMINT_MUL(const_8, one_over_2p);
403                     const SIMINT_DBLTYPE vrr_const_9_over_2p = SIMINT_MUL(const_9, one_over_2p);
404                     const SIMINT_DBLTYPE vrr_const_10_over_2p = SIMINT_MUL(const_10, one_over_2p);
405                     const SIMINT_DBLTYPE vrr_const_1_over_2q = one_over_2q;
406                     const SIMINT_DBLTYPE vrr_const_2_over_2q = SIMINT_MUL(const_2, one_over_2q);
407                     const SIMINT_DBLTYPE vrr_const_3_over_2q = SIMINT_MUL(const_3, one_over_2q);
408                     const SIMINT_DBLTYPE vrr_const_4_over_2q = SIMINT_MUL(const_4, one_over_2q);
409                     const SIMINT_DBLTYPE vrr_const_5_over_2q = SIMINT_MUL(const_5, one_over_2q);
410                     const SIMINT_DBLTYPE vrr_const_6_over_2q = SIMINT_MUL(const_6, one_over_2q);
411                     const SIMINT_DBLTYPE vrr_const_1_over_2pq = one_over_2pq;
412                     const SIMINT_DBLTYPE vrr_const_2_over_2pq = SIMINT_MUL(const_2, one_over_2pq);
413                     const SIMINT_DBLTYPE vrr_const_3_over_2pq = SIMINT_MUL(const_3, one_over_2pq);
414                     const SIMINT_DBLTYPE vrr_const_4_over_2pq = SIMINT_MUL(const_4, one_over_2pq);
415                     const SIMINT_DBLTYPE vrr_const_5_over_2pq = SIMINT_MUL(const_5, one_over_2pq);
416                     const SIMINT_DBLTYPE vrr_const_6_over_2pq = SIMINT_MUL(const_6, one_over_2pq);
417                     const SIMINT_DBLTYPE vrr_const_7_over_2pq = SIMINT_MUL(const_7, one_over_2pq);
418                     const SIMINT_DBLTYPE vrr_const_8_over_2pq = SIMINT_MUL(const_8, one_over_2pq);
419                     const SIMINT_DBLTYPE vrr_const_9_over_2pq = SIMINT_MUL(const_9, one_over_2pq);
420                     const SIMINT_DBLTYPE vrr_const_10_over_2pq = SIMINT_MUL(const_10, one_over_2pq);
421                     const SIMINT_DBLTYPE vrr_const_11_over_2pq = SIMINT_MUL(const_11, one_over_2pq);
422 
423 
424 
425                     // Forming PRIM_INT__p_s_s_s[18 * 3];
426                     for(n = 0; n < 18; ++n)  // loop over orders of auxiliary function
427                     {
428 
429                         PRIM_INT__p_s_s_s[n * 3 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
430                         PRIM_INT__p_s_s_s[n * 3 + 0] = SIMINT_FMADD( aop_PQ[0], PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__p_s_s_s[n * 3 + 0]);
431 
432                         PRIM_INT__p_s_s_s[n * 3 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
433                         PRIM_INT__p_s_s_s[n * 3 + 1] = SIMINT_FMADD( aop_PQ[1], PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__p_s_s_s[n * 3 + 1]);
434 
435                         PRIM_INT__p_s_s_s[n * 3 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
436                         PRIM_INT__p_s_s_s[n * 3 + 2] = SIMINT_FMADD( aop_PQ[2], PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__p_s_s_s[n * 3 + 2]);
437 
438                     }
439 
440 
441 
442                     // Forming PRIM_INT__d_s_s_s[17 * 6];
443                     for(n = 0; n < 17; ++n)  // loop over orders of auxiliary function
444                     {
445 
446                         PRIM_INT__d_s_s_s[n * 6 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
447                         PRIM_INT__d_s_s_s[n * 6 + 0] = SIMINT_FMADD( aop_PQ[0], PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__d_s_s_s[n * 6 + 0]);
448                         PRIM_INT__d_s_s_s[n * 6 + 0] = SIMINT_FMADD( vrr_const_1_over_2p, SIMINT_FMADD(a_over_p, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__d_s_s_s[n * 6 + 0]);
449 
450                         PRIM_INT__d_s_s_s[n * 6 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
451                         PRIM_INT__d_s_s_s[n * 6 + 1] = SIMINT_FMADD( aop_PQ[1], PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__d_s_s_s[n * 6 + 1]);
452 
453                         PRIM_INT__d_s_s_s[n * 6 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
454                         PRIM_INT__d_s_s_s[n * 6 + 2] = SIMINT_FMADD( aop_PQ[2], PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__d_s_s_s[n * 6 + 2]);
455 
456                         PRIM_INT__d_s_s_s[n * 6 + 3] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
457                         PRIM_INT__d_s_s_s[n * 6 + 3] = SIMINT_FMADD( aop_PQ[1], PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__d_s_s_s[n * 6 + 3]);
458                         PRIM_INT__d_s_s_s[n * 6 + 3] = SIMINT_FMADD( vrr_const_1_over_2p, SIMINT_FMADD(a_over_p, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__d_s_s_s[n * 6 + 3]);
459 
460                         PRIM_INT__d_s_s_s[n * 6 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
461                         PRIM_INT__d_s_s_s[n * 6 + 4] = SIMINT_FMADD( aop_PQ[2], PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__d_s_s_s[n * 6 + 4]);
462 
463                         PRIM_INT__d_s_s_s[n * 6 + 5] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
464                         PRIM_INT__d_s_s_s[n * 6 + 5] = SIMINT_FMADD( aop_PQ[2], PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__d_s_s_s[n * 6 + 5]);
465                         PRIM_INT__d_s_s_s[n * 6 + 5] = SIMINT_FMADD( vrr_const_1_over_2p, SIMINT_FMADD(a_over_p, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__d_s_s_s[n * 6 + 5]);
466 
467                     }
468 
469 
470 
471                     // Forming PRIM_INT__f_s_s_s[16 * 10];
472                     for(n = 0; n < 16; ++n)  // loop over orders of auxiliary function
473                     {
474 
475                         PRIM_INT__f_s_s_s[n * 10 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
476                         PRIM_INT__f_s_s_s[n * 10 + 0] = SIMINT_FMADD( aop_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 0], PRIM_INT__f_s_s_s[n * 10 + 0]);
477                         PRIM_INT__f_s_s_s[n * 10 + 0] = SIMINT_FMADD( vrr_const_2_over_2p, SIMINT_FMADD(a_over_p, PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__p_s_s_s[n * 3 + 0]), PRIM_INT__f_s_s_s[n * 10 + 0]);
478 
479                         PRIM_INT__f_s_s_s[n * 10 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
480                         PRIM_INT__f_s_s_s[n * 10 + 1] = SIMINT_FMADD( aop_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 0], PRIM_INT__f_s_s_s[n * 10 + 1]);
481 
482                         PRIM_INT__f_s_s_s[n * 10 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
483                         PRIM_INT__f_s_s_s[n * 10 + 2] = SIMINT_FMADD( aop_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 0], PRIM_INT__f_s_s_s[n * 10 + 2]);
484 
485                         PRIM_INT__f_s_s_s[n * 10 + 3] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
486                         PRIM_INT__f_s_s_s[n * 10 + 3] = SIMINT_FMADD( aop_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 3], PRIM_INT__f_s_s_s[n * 10 + 3]);
487 
488                         PRIM_INT__f_s_s_s[n * 10 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
489                         PRIM_INT__f_s_s_s[n * 10 + 4] = SIMINT_FMADD( aop_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 1], PRIM_INT__f_s_s_s[n * 10 + 4]);
490 
491                         PRIM_INT__f_s_s_s[n * 10 + 5] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
492                         PRIM_INT__f_s_s_s[n * 10 + 5] = SIMINT_FMADD( aop_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 5], PRIM_INT__f_s_s_s[n * 10 + 5]);
493 
494                         PRIM_INT__f_s_s_s[n * 10 + 6] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
495                         PRIM_INT__f_s_s_s[n * 10 + 6] = SIMINT_FMADD( aop_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 3], PRIM_INT__f_s_s_s[n * 10 + 6]);
496                         PRIM_INT__f_s_s_s[n * 10 + 6] = SIMINT_FMADD( vrr_const_2_over_2p, SIMINT_FMADD(a_over_p, PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__p_s_s_s[n * 3 + 1]), PRIM_INT__f_s_s_s[n * 10 + 6]);
497 
498                         PRIM_INT__f_s_s_s[n * 10 + 7] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
499                         PRIM_INT__f_s_s_s[n * 10 + 7] = SIMINT_FMADD( aop_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 3], PRIM_INT__f_s_s_s[n * 10 + 7]);
500 
501                         PRIM_INT__f_s_s_s[n * 10 + 8] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
502                         PRIM_INT__f_s_s_s[n * 10 + 8] = SIMINT_FMADD( aop_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 5], PRIM_INT__f_s_s_s[n * 10 + 8]);
503 
504                         PRIM_INT__f_s_s_s[n * 10 + 9] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
505                         PRIM_INT__f_s_s_s[n * 10 + 9] = SIMINT_FMADD( aop_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 5], PRIM_INT__f_s_s_s[n * 10 + 9]);
506                         PRIM_INT__f_s_s_s[n * 10 + 9] = SIMINT_FMADD( vrr_const_2_over_2p, SIMINT_FMADD(a_over_p, PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__p_s_s_s[n * 3 + 2]), PRIM_INT__f_s_s_s[n * 10 + 9]);
507 
508                     }
509 
510 
511                     VRR_I_g_s_s_s(
512                             PRIM_INT__g_s_s_s,
513                             PRIM_INT__f_s_s_s,
514                             PRIM_INT__d_s_s_s,
515                             P_PA,
516                             a_over_p,
517                             aop_PQ,
518                             one_over_2p,
519                             15);
520 
521 
522                     VRR_I_h_s_s_s(
523                             PRIM_INT__h_s_s_s,
524                             PRIM_INT__g_s_s_s,
525                             PRIM_INT__f_s_s_s,
526                             P_PA,
527                             a_over_p,
528                             aop_PQ,
529                             one_over_2p,
530                             14);
531 
532 
533                     ostei_general_vrr1_I(6, 13,
534                             one_over_2p, a_over_p, aop_PQ, P_PA,
535                             PRIM_INT__h_s_s_s, PRIM_INT__g_s_s_s, PRIM_INT__i_s_s_s);
536 
537 
538                     ostei_general_vrr1_I(7, 12,
539                             one_over_2p, a_over_p, aop_PQ, P_PA,
540                             PRIM_INT__i_s_s_s, PRIM_INT__h_s_s_s, PRIM_INT__k_s_s_s);
541 
542 
543                     ostei_general_vrr_K(7, 0, 1, 0, 7,
544                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
545                             PRIM_INT__k_s_s_s, NULL, NULL, PRIM_INT__i_s_s_s, NULL, PRIM_INT__k_s_p_s);
546 
547 
548                     ostei_general_vrr_K(6, 0, 1, 0, 7,
549                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
550                             PRIM_INT__i_s_s_s, NULL, NULL, PRIM_INT__h_s_s_s, NULL, PRIM_INT__i_s_p_s);
551 
552 
553                     ostei_general_vrr_K(7, 0, 2, 0, 6,
554                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
555                             PRIM_INT__k_s_p_s, PRIM_INT__k_s_s_s, NULL, PRIM_INT__i_s_p_s, NULL, PRIM_INT__k_s_d_s);
556 
557 
558                     ostei_general_vrr_K(5, 0, 1, 0, 7,
559                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
560                             PRIM_INT__h_s_s_s, NULL, NULL, PRIM_INT__g_s_s_s, NULL, PRIM_INT__h_s_p_s);
561 
562 
563                     ostei_general_vrr_K(6, 0, 2, 0, 6,
564                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
565                             PRIM_INT__i_s_p_s, PRIM_INT__i_s_s_s, NULL, PRIM_INT__h_s_p_s, NULL, PRIM_INT__i_s_d_s);
566 
567 
568                     ostei_general_vrr_K(7, 0, 3, 0, 5,
569                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
570                             PRIM_INT__k_s_d_s, PRIM_INT__k_s_p_s, NULL, PRIM_INT__i_s_d_s, NULL, PRIM_INT__k_s_f_s);
571 
572 
573                     VRR_K_g_s_p_s(
574                             PRIM_INT__g_s_p_s,
575                             PRIM_INT__g_s_s_s,
576                             PRIM_INT__f_s_s_s,
577                             Q_PA,
578                             aoq_PQ,
579                             one_over_2pq,
580                             7);
581 
582 
583                     ostei_general_vrr_K(5, 0, 2, 0, 6,
584                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
585                             PRIM_INT__h_s_p_s, PRIM_INT__h_s_s_s, NULL, PRIM_INT__g_s_p_s, NULL, PRIM_INT__h_s_d_s);
586 
587 
588                     ostei_general_vrr_K(6, 0, 3, 0, 5,
589                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
590                             PRIM_INT__i_s_d_s, PRIM_INT__i_s_p_s, NULL, PRIM_INT__h_s_d_s, NULL, PRIM_INT__i_s_f_s);
591 
592 
593                     ostei_general_vrr_K(7, 0, 4, 0, 4,
594                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
595                             PRIM_INT__k_s_f_s, PRIM_INT__k_s_d_s, NULL, PRIM_INT__i_s_f_s, NULL, PRIM_INT__k_s_g_s);
596 
597 
598                     VRR_K_f_s_p_s(
599                             PRIM_INT__f_s_p_s,
600                             PRIM_INT__f_s_s_s,
601                             PRIM_INT__d_s_s_s,
602                             Q_PA,
603                             aoq_PQ,
604                             one_over_2pq,
605                             7);
606 
607 
608                     ostei_general_vrr_K(4, 0, 2, 0, 6,
609                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
610                             PRIM_INT__g_s_p_s, PRIM_INT__g_s_s_s, NULL, PRIM_INT__f_s_p_s, NULL, PRIM_INT__g_s_d_s);
611 
612 
613                     ostei_general_vrr_K(5, 0, 3, 0, 5,
614                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
615                             PRIM_INT__h_s_d_s, PRIM_INT__h_s_p_s, NULL, PRIM_INT__g_s_d_s, NULL, PRIM_INT__h_s_f_s);
616 
617 
618                     ostei_general_vrr_K(6, 0, 4, 0, 4,
619                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
620                             PRIM_INT__i_s_f_s, PRIM_INT__i_s_d_s, NULL, PRIM_INT__h_s_f_s, NULL, PRIM_INT__i_s_g_s);
621 
622 
623                     ostei_general_vrr_K(7, 0, 5, 0, 3,
624                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
625                             PRIM_INT__k_s_g_s, PRIM_INT__k_s_f_s, NULL, PRIM_INT__i_s_g_s, NULL, PRIM_INT__k_s_h_s);
626 
627 
628                     ostei_general_vrr1_I(8, 11,
629                             one_over_2p, a_over_p, aop_PQ, P_PA,
630                             PRIM_INT__k_s_s_s, PRIM_INT__i_s_s_s, PRIM_INT__l_s_s_s);
631 
632 
633                     ostei_general_vrr_K(8, 0, 1, 0, 7,
634                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
635                             PRIM_INT__l_s_s_s, NULL, NULL, PRIM_INT__k_s_s_s, NULL, PRIM_INT__l_s_p_s);
636 
637 
638                     ostei_general_vrr_K(8, 0, 2, 0, 6,
639                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
640                             PRIM_INT__l_s_p_s, PRIM_INT__l_s_s_s, NULL, PRIM_INT__k_s_p_s, NULL, PRIM_INT__l_s_d_s);
641 
642 
643                     ostei_general_vrr_K(8, 0, 3, 0, 5,
644                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
645                             PRIM_INT__l_s_d_s, PRIM_INT__l_s_p_s, NULL, PRIM_INT__k_s_d_s, NULL, PRIM_INT__l_s_f_s);
646 
647 
648                     ostei_general_vrr_K(8, 0, 4, 0, 4,
649                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
650                             PRIM_INT__l_s_f_s, PRIM_INT__l_s_d_s, NULL, PRIM_INT__k_s_f_s, NULL, PRIM_INT__l_s_g_s);
651 
652 
653 
654                     // Forming PRIM_INT__d_s_p_s[7 * 18];
655                     for(n = 0; n < 7; ++n)  // loop over orders of auxiliary function
656                     {
657 
658                         PRIM_INT__d_s_p_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
659                         PRIM_INT__d_s_p_s[n * 18 + 0] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 0], PRIM_INT__d_s_p_s[n * 18 + 0]);
660                         PRIM_INT__d_s_p_s[n * 18 + 0] = SIMINT_FMADD( vrr_const_2_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__d_s_p_s[n * 18 + 0]);
661 
662                         PRIM_INT__d_s_p_s[n * 18 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
663                         PRIM_INT__d_s_p_s[n * 18 + 1] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 0], PRIM_INT__d_s_p_s[n * 18 + 1]);
664 
665                         PRIM_INT__d_s_p_s[n * 18 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
666                         PRIM_INT__d_s_p_s[n * 18 + 2] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 0], PRIM_INT__d_s_p_s[n * 18 + 2]);
667 
668                         PRIM_INT__d_s_p_s[n * 18 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 1]);
669                         PRIM_INT__d_s_p_s[n * 18 + 3] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 1], PRIM_INT__d_s_p_s[n * 18 + 3]);
670                         PRIM_INT__d_s_p_s[n * 18 + 3] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__d_s_p_s[n * 18 + 3]);
671 
672                         PRIM_INT__d_s_p_s[n * 18 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 1]);
673                         PRIM_INT__d_s_p_s[n * 18 + 4] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 1], PRIM_INT__d_s_p_s[n * 18 + 4]);
674                         PRIM_INT__d_s_p_s[n * 18 + 4] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__d_s_p_s[n * 18 + 4]);
675 
676                         PRIM_INT__d_s_p_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
677                         PRIM_INT__d_s_p_s[n * 18 + 5] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 1], PRIM_INT__d_s_p_s[n * 18 + 5]);
678 
679                         PRIM_INT__d_s_p_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 2]);
680                         PRIM_INT__d_s_p_s[n * 18 + 6] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 2], PRIM_INT__d_s_p_s[n * 18 + 6]);
681                         PRIM_INT__d_s_p_s[n * 18 + 6] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__d_s_p_s[n * 18 + 6]);
682 
683                         PRIM_INT__d_s_p_s[n * 18 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 2]);
684                         PRIM_INT__d_s_p_s[n * 18 + 7] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 2], PRIM_INT__d_s_p_s[n * 18 + 7]);
685 
686                         PRIM_INT__d_s_p_s[n * 18 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 2]);
687                         PRIM_INT__d_s_p_s[n * 18 + 8] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 2], PRIM_INT__d_s_p_s[n * 18 + 8]);
688                         PRIM_INT__d_s_p_s[n * 18 + 8] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__d_s_p_s[n * 18 + 8]);
689 
690                         PRIM_INT__d_s_p_s[n * 18 + 9] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
691                         PRIM_INT__d_s_p_s[n * 18 + 9] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 3], PRIM_INT__d_s_p_s[n * 18 + 9]);
692 
693                         PRIM_INT__d_s_p_s[n * 18 + 10] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
694                         PRIM_INT__d_s_p_s[n * 18 + 10] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 3], PRIM_INT__d_s_p_s[n * 18 + 10]);
695                         PRIM_INT__d_s_p_s[n * 18 + 10] = SIMINT_FMADD( vrr_const_2_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__d_s_p_s[n * 18 + 10]);
696 
697                         PRIM_INT__d_s_p_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
698                         PRIM_INT__d_s_p_s[n * 18 + 11] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 3], PRIM_INT__d_s_p_s[n * 18 + 11]);
699 
700                         PRIM_INT__d_s_p_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 4]);
701                         PRIM_INT__d_s_p_s[n * 18 + 12] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 4], PRIM_INT__d_s_p_s[n * 18 + 12]);
702 
703                         PRIM_INT__d_s_p_s[n * 18 + 13] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 4]);
704                         PRIM_INT__d_s_p_s[n * 18 + 13] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 4], PRIM_INT__d_s_p_s[n * 18 + 13]);
705                         PRIM_INT__d_s_p_s[n * 18 + 13] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__d_s_p_s[n * 18 + 13]);
706 
707                         PRIM_INT__d_s_p_s[n * 18 + 14] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 4]);
708                         PRIM_INT__d_s_p_s[n * 18 + 14] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 4], PRIM_INT__d_s_p_s[n * 18 + 14]);
709                         PRIM_INT__d_s_p_s[n * 18 + 14] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__d_s_p_s[n * 18 + 14]);
710 
711                         PRIM_INT__d_s_p_s[n * 18 + 15] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
712                         PRIM_INT__d_s_p_s[n * 18 + 15] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__d_s_s_s[(n+1) * 6 + 5], PRIM_INT__d_s_p_s[n * 18 + 15]);
713 
714                         PRIM_INT__d_s_p_s[n * 18 + 16] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
715                         PRIM_INT__d_s_p_s[n * 18 + 16] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__d_s_s_s[(n+1) * 6 + 5], PRIM_INT__d_s_p_s[n * 18 + 16]);
716 
717                         PRIM_INT__d_s_p_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
718                         PRIM_INT__d_s_p_s[n * 18 + 17] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__d_s_s_s[(n+1) * 6 + 5], PRIM_INT__d_s_p_s[n * 18 + 17]);
719                         PRIM_INT__d_s_p_s[n * 18 + 17] = SIMINT_FMADD( vrr_const_2_over_2pq, PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__d_s_p_s[n * 18 + 17]);
720 
721                     }
722 
723 
724                     VRR_K_f_s_d_s(
725                             PRIM_INT__f_s_d_s,
726                             PRIM_INT__f_s_p_s,
727                             PRIM_INT__f_s_s_s,
728                             PRIM_INT__d_s_p_s,
729                             Q_PA,
730                             a_over_q,
731                             aoq_PQ,
732                             one_over_2pq,
733                             one_over_2q,
734                             6);
735 
736 
737                     ostei_general_vrr_K(4, 0, 3, 0, 5,
738                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
739                             PRIM_INT__g_s_d_s, PRIM_INT__g_s_p_s, NULL, PRIM_INT__f_s_d_s, NULL, PRIM_INT__g_s_f_s);
740 
741 
742                     ostei_general_vrr_K(5, 0, 4, 0, 4,
743                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
744                             PRIM_INT__h_s_f_s, PRIM_INT__h_s_d_s, NULL, PRIM_INT__g_s_f_s, NULL, PRIM_INT__h_s_g_s);
745 
746 
747                     ostei_general_vrr_K(6, 0, 5, 0, 3,
748                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
749                             PRIM_INT__i_s_g_s, PRIM_INT__i_s_f_s, NULL, PRIM_INT__h_s_g_s, NULL, PRIM_INT__i_s_h_s);
750 
751 
752                     ostei_general_vrr_K(7, 0, 6, 0, 2,
753                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
754                             PRIM_INT__k_s_h_s, PRIM_INT__k_s_g_s, NULL, PRIM_INT__i_s_h_s, NULL, PRIM_INT__k_s_i_s);
755 
756 
757                     ostei_general_vrr_K(8, 0, 5, 0, 3,
758                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
759                             PRIM_INT__l_s_g_s, PRIM_INT__l_s_f_s, NULL, PRIM_INT__k_s_g_s, NULL, PRIM_INT__l_s_h_s);
760 
761 
762                     ostei_general_vrr1_I(9, 10,
763                             one_over_2p, a_over_p, aop_PQ, P_PA,
764                             PRIM_INT__l_s_s_s, PRIM_INT__k_s_s_s, PRIM_INT__m_s_s_s);
765 
766 
767                     ostei_general_vrr_K(9, 0, 1, 0, 7,
768                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
769                             PRIM_INT__m_s_s_s, NULL, NULL, PRIM_INT__l_s_s_s, NULL, PRIM_INT__m_s_p_s);
770 
771 
772                     ostei_general_vrr_K(9, 0, 2, 0, 6,
773                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
774                             PRIM_INT__m_s_p_s, PRIM_INT__m_s_s_s, NULL, PRIM_INT__l_s_p_s, NULL, PRIM_INT__m_s_d_s);
775 
776 
777                     ostei_general_vrr_K(9, 0, 3, 0, 5,
778                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
779                             PRIM_INT__m_s_d_s, PRIM_INT__m_s_p_s, NULL, PRIM_INT__l_s_d_s, NULL, PRIM_INT__m_s_f_s);
780 
781 
782                     ostei_general_vrr_K(9, 0, 4, 0, 4,
783                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
784                             PRIM_INT__m_s_f_s, PRIM_INT__m_s_d_s, NULL, PRIM_INT__l_s_f_s, NULL, PRIM_INT__m_s_g_s);
785 
786 
787 
788                     // Forming PRIM_INT__p_s_p_s[7 * 9];
789                     for(n = 0; n < 7; ++n)  // loop over orders of auxiliary function
790                     {
791 
792                         PRIM_INT__p_s_p_s[n * 9 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
793                         PRIM_INT__p_s_p_s[n * 9 + 0] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__p_s_p_s[n * 9 + 0]);
794                         PRIM_INT__p_s_p_s[n * 9 + 0] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__p_s_p_s[n * 9 + 0]);
795 
796                         PRIM_INT__p_s_p_s[n * 9 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
797                         PRIM_INT__p_s_p_s[n * 9 + 1] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__p_s_p_s[n * 9 + 1]);
798 
799                         PRIM_INT__p_s_p_s[n * 9 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
800                         PRIM_INT__p_s_p_s[n * 9 + 2] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__p_s_p_s[n * 9 + 2]);
801 
802                         PRIM_INT__p_s_p_s[n * 9 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 1]);
803                         PRIM_INT__p_s_p_s[n * 9 + 3] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__p_s_p_s[n * 9 + 3]);
804 
805                         PRIM_INT__p_s_p_s[n * 9 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
806                         PRIM_INT__p_s_p_s[n * 9 + 4] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__p_s_p_s[n * 9 + 4]);
807                         PRIM_INT__p_s_p_s[n * 9 + 4] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__p_s_p_s[n * 9 + 4]);
808 
809                         PRIM_INT__p_s_p_s[n * 9 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
810                         PRIM_INT__p_s_p_s[n * 9 + 5] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__p_s_p_s[n * 9 + 5]);
811 
812                         PRIM_INT__p_s_p_s[n * 9 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 2]);
813                         PRIM_INT__p_s_p_s[n * 9 + 6] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__p_s_p_s[n * 9 + 6]);
814 
815                         PRIM_INT__p_s_p_s[n * 9 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 2]);
816                         PRIM_INT__p_s_p_s[n * 9 + 7] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__p_s_p_s[n * 9 + 7]);
817 
818                         PRIM_INT__p_s_p_s[n * 9 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
819                         PRIM_INT__p_s_p_s[n * 9 + 8] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__p_s_p_s[n * 9 + 8]);
820                         PRIM_INT__p_s_p_s[n * 9 + 8] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__p_s_p_s[n * 9 + 8]);
821 
822                     }
823 
824 
825                     VRR_K_d_s_d_s(
826                             PRIM_INT__d_s_d_s,
827                             PRIM_INT__d_s_p_s,
828                             PRIM_INT__d_s_s_s,
829                             PRIM_INT__p_s_p_s,
830                             Q_PA,
831                             a_over_q,
832                             aoq_PQ,
833                             one_over_2pq,
834                             one_over_2q,
835                             6);
836 
837 
838                     ostei_general_vrr_K(3, 0, 3, 0, 5,
839                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
840                             PRIM_INT__f_s_d_s, PRIM_INT__f_s_p_s, NULL, PRIM_INT__d_s_d_s, NULL, PRIM_INT__f_s_f_s);
841 
842 
843                     ostei_general_vrr_K(4, 0, 4, 0, 4,
844                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
845                             PRIM_INT__g_s_f_s, PRIM_INT__g_s_d_s, NULL, PRIM_INT__f_s_f_s, NULL, PRIM_INT__g_s_g_s);
846 
847 
848                     ostei_general_vrr_K(5, 0, 5, 0, 3,
849                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
850                             PRIM_INT__h_s_g_s, PRIM_INT__h_s_f_s, NULL, PRIM_INT__g_s_g_s, NULL, PRIM_INT__h_s_h_s);
851 
852 
853                     ostei_general_vrr_K(6, 0, 6, 0, 2,
854                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
855                             PRIM_INT__i_s_h_s, PRIM_INT__i_s_g_s, NULL, PRIM_INT__h_s_h_s, NULL, PRIM_INT__i_s_i_s);
856 
857 
858                     ostei_general_vrr_K(7, 0, 7, 0, 1,
859                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
860                             PRIM_INT__k_s_i_s, PRIM_INT__k_s_h_s, NULL, PRIM_INT__i_s_i_s, NULL, PRIM_INT__k_s_k_s);
861 
862 
863                     ostei_general_vrr_K(8, 0, 6, 0, 2,
864                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
865                             PRIM_INT__l_s_h_s, PRIM_INT__l_s_g_s, NULL, PRIM_INT__k_s_h_s, NULL, PRIM_INT__l_s_i_s);
866 
867 
868                     ostei_general_vrr_K(9, 0, 5, 0, 3,
869                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
870                             PRIM_INT__m_s_g_s, PRIM_INT__m_s_f_s, NULL, PRIM_INT__l_s_g_s, NULL, PRIM_INT__m_s_h_s);
871 
872 
873                     ostei_general_vrr1_I(10, 9,
874                             one_over_2p, a_over_p, aop_PQ, P_PA,
875                             PRIM_INT__m_s_s_s, PRIM_INT__l_s_s_s, PRIM_INT__n_s_s_s);
876 
877 
878                     ostei_general_vrr_K(10, 0, 1, 0, 7,
879                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
880                             PRIM_INT__n_s_s_s, NULL, NULL, PRIM_INT__m_s_s_s, NULL, PRIM_INT__n_s_p_s);
881 
882 
883                     ostei_general_vrr_K(10, 0, 2, 0, 6,
884                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
885                             PRIM_INT__n_s_p_s, PRIM_INT__n_s_s_s, NULL, PRIM_INT__m_s_p_s, NULL, PRIM_INT__n_s_d_s);
886 
887 
888                     ostei_general_vrr_K(10, 0, 3, 0, 5,
889                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
890                             PRIM_INT__n_s_d_s, PRIM_INT__n_s_p_s, NULL, PRIM_INT__m_s_d_s, NULL, PRIM_INT__n_s_f_s);
891 
892 
893                     ostei_general_vrr_K(10, 0, 4, 0, 4,
894                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
895                             PRIM_INT__n_s_f_s, PRIM_INT__n_s_d_s, NULL, PRIM_INT__m_s_f_s, NULL, PRIM_INT__n_s_g_s);
896 
897 
898                     ostei_general_vrr_K(8, 0, 7, 0, 1,
899                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
900                             PRIM_INT__l_s_i_s, PRIM_INT__l_s_h_s, NULL, PRIM_INT__k_s_i_s, NULL, PRIM_INT__l_s_k_s);
901 
902 
903                     ostei_general_vrr_K(9, 0, 6, 0, 2,
904                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
905                             PRIM_INT__m_s_h_s, PRIM_INT__m_s_g_s, NULL, PRIM_INT__l_s_h_s, NULL, PRIM_INT__m_s_i_s);
906 
907 
908                     ostei_general_vrr_K(10, 0, 5, 0, 3,
909                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
910                             PRIM_INT__n_s_g_s, PRIM_INT__n_s_f_s, NULL, PRIM_INT__m_s_g_s, NULL, PRIM_INT__n_s_h_s);
911 
912 
913                     ostei_general_vrr1_I(11, 8,
914                             one_over_2p, a_over_p, aop_PQ, P_PA,
915                             PRIM_INT__n_s_s_s, PRIM_INT__m_s_s_s, PRIM_INT__o_s_s_s);
916 
917 
918                     ostei_general_vrr_K(11, 0, 1, 0, 7,
919                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
920                             PRIM_INT__o_s_s_s, NULL, NULL, PRIM_INT__n_s_s_s, NULL, PRIM_INT__o_s_p_s);
921 
922 
923                     ostei_general_vrr_K(11, 0, 2, 0, 6,
924                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
925                             PRIM_INT__o_s_p_s, PRIM_INT__o_s_s_s, NULL, PRIM_INT__n_s_p_s, NULL, PRIM_INT__o_s_d_s);
926 
927 
928                     ostei_general_vrr_K(11, 0, 3, 0, 5,
929                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
930                             PRIM_INT__o_s_d_s, PRIM_INT__o_s_p_s, NULL, PRIM_INT__n_s_d_s, NULL, PRIM_INT__o_s_f_s);
931 
932 
933                     ostei_general_vrr_K(11, 0, 4, 0, 4,
934                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
935                             PRIM_INT__o_s_f_s, PRIM_INT__o_s_d_s, NULL, PRIM_INT__n_s_f_s, NULL, PRIM_INT__o_s_g_s);
936 
937 
938                     ostei_general_vrr_K(9, 0, 7, 0, 1,
939                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
940                             PRIM_INT__m_s_i_s, PRIM_INT__m_s_h_s, NULL, PRIM_INT__l_s_i_s, NULL, PRIM_INT__m_s_k_s);
941 
942 
943                     ostei_general_vrr_K(10, 0, 6, 0, 2,
944                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
945                             PRIM_INT__n_s_h_s, PRIM_INT__n_s_g_s, NULL, PRIM_INT__m_s_h_s, NULL, PRIM_INT__n_s_i_s);
946 
947 
948                     ostei_general_vrr_K(11, 0, 5, 0, 3,
949                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
950                             PRIM_INT__o_s_g_s, PRIM_INT__o_s_f_s, NULL, PRIM_INT__n_s_g_s, NULL, PRIM_INT__o_s_h_s);
951 
952 
953                     ostei_general_vrr_K(10, 0, 7, 0, 1,
954                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
955                             PRIM_INT__n_s_i_s, PRIM_INT__n_s_h_s, NULL, PRIM_INT__m_s_i_s, NULL, PRIM_INT__n_s_k_s);
956 
957 
958                     ostei_general_vrr_K(11, 0, 6, 0, 2,
959                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
960                             PRIM_INT__o_s_h_s, PRIM_INT__o_s_g_s, NULL, PRIM_INT__n_s_h_s, NULL, PRIM_INT__o_s_i_s);
961 
962 
963                     ostei_general_vrr_K(11, 0, 7, 0, 1,
964                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
965                             PRIM_INT__o_s_i_s, PRIM_INT__o_s_h_s, NULL, PRIM_INT__n_s_i_s, NULL, PRIM_INT__o_s_k_s);
966 
967 
968 
969 
970                     ////////////////////////////////////
971                     // Accumulate contracted integrals
972                     ////////////////////////////////////
973                     if(lastoffset == 0)
974                     {
975                         contract_all(540, PRIM_INT__k_s_g_s, PRIM_PTR_INT__k_s_g_s);
976                         contract_all(756, PRIM_INT__k_s_h_s, PRIM_PTR_INT__k_s_h_s);
977                         contract_all(1008, PRIM_INT__k_s_i_s, PRIM_PTR_INT__k_s_i_s);
978                         contract_all(1296, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
979                         contract_all(675, PRIM_INT__l_s_g_s, PRIM_PTR_INT__l_s_g_s);
980                         contract_all(945, PRIM_INT__l_s_h_s, PRIM_PTR_INT__l_s_h_s);
981                         contract_all(1260, PRIM_INT__l_s_i_s, PRIM_PTR_INT__l_s_i_s);
982                         contract_all(1620, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
983                         contract_all(825, PRIM_INT__m_s_g_s, PRIM_PTR_INT__m_s_g_s);
984                         contract_all(1155, PRIM_INT__m_s_h_s, PRIM_PTR_INT__m_s_h_s);
985                         contract_all(1540, PRIM_INT__m_s_i_s, PRIM_PTR_INT__m_s_i_s);
986                         contract_all(1980, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
987                         contract_all(990, PRIM_INT__n_s_g_s, PRIM_PTR_INT__n_s_g_s);
988                         contract_all(1386, PRIM_INT__n_s_h_s, PRIM_PTR_INT__n_s_h_s);
989                         contract_all(1848, PRIM_INT__n_s_i_s, PRIM_PTR_INT__n_s_i_s);
990                         contract_all(2376, PRIM_INT__n_s_k_s, PRIM_PTR_INT__n_s_k_s);
991                         contract_all(1170, PRIM_INT__o_s_g_s, PRIM_PTR_INT__o_s_g_s);
992                         contract_all(1638, PRIM_INT__o_s_h_s, PRIM_PTR_INT__o_s_h_s);
993                         contract_all(2184, PRIM_INT__o_s_i_s, PRIM_PTR_INT__o_s_i_s);
994                         contract_all(2808, PRIM_INT__o_s_k_s, PRIM_PTR_INT__o_s_k_s);
995                     }
996                     else
997                     {
998                         contract(540, shelloffsets, PRIM_INT__k_s_g_s, PRIM_PTR_INT__k_s_g_s);
999                         contract(756, shelloffsets, PRIM_INT__k_s_h_s, PRIM_PTR_INT__k_s_h_s);
1000                         contract(1008, shelloffsets, PRIM_INT__k_s_i_s, PRIM_PTR_INT__k_s_i_s);
1001                         contract(1296, shelloffsets, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
1002                         contract(675, shelloffsets, PRIM_INT__l_s_g_s, PRIM_PTR_INT__l_s_g_s);
1003                         contract(945, shelloffsets, PRIM_INT__l_s_h_s, PRIM_PTR_INT__l_s_h_s);
1004                         contract(1260, shelloffsets, PRIM_INT__l_s_i_s, PRIM_PTR_INT__l_s_i_s);
1005                         contract(1620, shelloffsets, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
1006                         contract(825, shelloffsets, PRIM_INT__m_s_g_s, PRIM_PTR_INT__m_s_g_s);
1007                         contract(1155, shelloffsets, PRIM_INT__m_s_h_s, PRIM_PTR_INT__m_s_h_s);
1008                         contract(1540, shelloffsets, PRIM_INT__m_s_i_s, PRIM_PTR_INT__m_s_i_s);
1009                         contract(1980, shelloffsets, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
1010                         contract(990, shelloffsets, PRIM_INT__n_s_g_s, PRIM_PTR_INT__n_s_g_s);
1011                         contract(1386, shelloffsets, PRIM_INT__n_s_h_s, PRIM_PTR_INT__n_s_h_s);
1012                         contract(1848, shelloffsets, PRIM_INT__n_s_i_s, PRIM_PTR_INT__n_s_i_s);
1013                         contract(2376, shelloffsets, PRIM_INT__n_s_k_s, PRIM_PTR_INT__n_s_k_s);
1014                         contract(1170, shelloffsets, PRIM_INT__o_s_g_s, PRIM_PTR_INT__o_s_g_s);
1015                         contract(1638, shelloffsets, PRIM_INT__o_s_h_s, PRIM_PTR_INT__o_s_h_s);
1016                         contract(2184, shelloffsets, PRIM_INT__o_s_i_s, PRIM_PTR_INT__o_s_i_s);
1017                         contract(2808, shelloffsets, PRIM_INT__o_s_k_s, PRIM_PTR_INT__o_s_k_s);
1018                         PRIM_PTR_INT__k_s_g_s += lastoffset*540;
1019                         PRIM_PTR_INT__k_s_h_s += lastoffset*756;
1020                         PRIM_PTR_INT__k_s_i_s += lastoffset*1008;
1021                         PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
1022                         PRIM_PTR_INT__l_s_g_s += lastoffset*675;
1023                         PRIM_PTR_INT__l_s_h_s += lastoffset*945;
1024                         PRIM_PTR_INT__l_s_i_s += lastoffset*1260;
1025                         PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
1026                         PRIM_PTR_INT__m_s_g_s += lastoffset*825;
1027                         PRIM_PTR_INT__m_s_h_s += lastoffset*1155;
1028                         PRIM_PTR_INT__m_s_i_s += lastoffset*1540;
1029                         PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
1030                         PRIM_PTR_INT__n_s_g_s += lastoffset*990;
1031                         PRIM_PTR_INT__n_s_h_s += lastoffset*1386;
1032                         PRIM_PTR_INT__n_s_i_s += lastoffset*1848;
1033                         PRIM_PTR_INT__n_s_k_s += lastoffset*2376;
1034                         PRIM_PTR_INT__o_s_g_s += lastoffset*1170;
1035                         PRIM_PTR_INT__o_s_h_s += lastoffset*1638;
1036                         PRIM_PTR_INT__o_s_i_s += lastoffset*2184;
1037                         PRIM_PTR_INT__o_s_k_s += lastoffset*2808;
1038                     }
1039 
1040                 }  // close loop over j
1041             }  // close loop over i
1042 
1043             //Advance to the next batch
1044             jstart = SIMINT_SIMD_ROUND(jend);
1045 
1046             //////////////////////////////////////////////
1047             // Contracted integrals: Horizontal recurrance
1048             //////////////////////////////////////////////
1049 
1050 
1051             const double hAB[3] = { P.AB_x[ab], P.AB_y[ab], P.AB_z[ab] };
1052 
1053 
1054             for(abcd = 0; abcd < nshellbatch; ++abcd, ++real_abcd)
1055             {
1056                 const double hCD[3] = { Q.AB_x[cd+abcd], Q.AB_y[cd+abcd], Q.AB_z[cd+abcd] };
1057 
1058                 // set up HRR pointers
1059                 double const * restrict HRR_INT__k_s_g_s = INT__k_s_g_s + abcd * 540;
1060                 double const * restrict HRR_INT__k_s_h_s = INT__k_s_h_s + abcd * 756;
1061                 double const * restrict HRR_INT__k_s_i_s = INT__k_s_i_s + abcd * 1008;
1062                 double const * restrict HRR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
1063                 double const * restrict HRR_INT__l_s_g_s = INT__l_s_g_s + abcd * 675;
1064                 double const * restrict HRR_INT__l_s_h_s = INT__l_s_h_s + abcd * 945;
1065                 double const * restrict HRR_INT__l_s_i_s = INT__l_s_i_s + abcd * 1260;
1066                 double const * restrict HRR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
1067                 double const * restrict HRR_INT__m_s_g_s = INT__m_s_g_s + abcd * 825;
1068                 double const * restrict HRR_INT__m_s_h_s = INT__m_s_h_s + abcd * 1155;
1069                 double const * restrict HRR_INT__m_s_i_s = INT__m_s_i_s + abcd * 1540;
1070                 double const * restrict HRR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
1071                 double const * restrict HRR_INT__n_s_g_s = INT__n_s_g_s + abcd * 990;
1072                 double const * restrict HRR_INT__n_s_h_s = INT__n_s_h_s + abcd * 1386;
1073                 double const * restrict HRR_INT__n_s_i_s = INT__n_s_i_s + abcd * 1848;
1074                 double const * restrict HRR_INT__n_s_k_s = INT__n_s_k_s + abcd * 2376;
1075                 double const * restrict HRR_INT__o_s_g_s = INT__o_s_g_s + abcd * 1170;
1076                 double const * restrict HRR_INT__o_s_h_s = INT__o_s_h_s + abcd * 1638;
1077                 double const * restrict HRR_INT__o_s_i_s = INT__o_s_i_s + abcd * 2184;
1078                 double const * restrict HRR_INT__o_s_k_s = INT__o_s_k_s + abcd * 2808;
1079                 double * restrict HRR_INT__k_g_g_f = INT__k_g_g_f + real_abcd * 81000;
1080 
1081                 // form INT__k_p_g_s
1082                 ostei_general_hrr_J(7, 1, 4, 0, hAB, HRR_INT__l_s_g_s, HRR_INT__k_s_g_s, HRR_INT__k_p_g_s);
1083 
1084                 // form INT__k_p_h_s
1085                 ostei_general_hrr_J(7, 1, 5, 0, hAB, HRR_INT__l_s_h_s, HRR_INT__k_s_h_s, HRR_INT__k_p_h_s);
1086 
1087                 // form INT__k_p_i_s
1088                 ostei_general_hrr_J(7, 1, 6, 0, hAB, HRR_INT__l_s_i_s, HRR_INT__k_s_i_s, HRR_INT__k_p_i_s);
1089 
1090                 // form INT__k_p_k_s
1091                 ostei_general_hrr_J(7, 1, 7, 0, hAB, HRR_INT__l_s_k_s, HRR_INT__k_s_k_s, HRR_INT__k_p_k_s);
1092 
1093                 // form INT__l_p_g_s
1094                 ostei_general_hrr_J(8, 1, 4, 0, hAB, HRR_INT__m_s_g_s, HRR_INT__l_s_g_s, HRR_INT__l_p_g_s);
1095 
1096                 // form INT__l_p_h_s
1097                 ostei_general_hrr_J(8, 1, 5, 0, hAB, HRR_INT__m_s_h_s, HRR_INT__l_s_h_s, HRR_INT__l_p_h_s);
1098 
1099                 // form INT__l_p_i_s
1100                 ostei_general_hrr_J(8, 1, 6, 0, hAB, HRR_INT__m_s_i_s, HRR_INT__l_s_i_s, HRR_INT__l_p_i_s);
1101 
1102                 // form INT__l_p_k_s
1103                 ostei_general_hrr_J(8, 1, 7, 0, hAB, HRR_INT__m_s_k_s, HRR_INT__l_s_k_s, HRR_INT__l_p_k_s);
1104 
1105                 // form INT__m_p_g_s
1106                 ostei_general_hrr_J(9, 1, 4, 0, hAB, HRR_INT__n_s_g_s, HRR_INT__m_s_g_s, HRR_INT__m_p_g_s);
1107 
1108                 // form INT__m_p_h_s
1109                 ostei_general_hrr_J(9, 1, 5, 0, hAB, HRR_INT__n_s_h_s, HRR_INT__m_s_h_s, HRR_INT__m_p_h_s);
1110 
1111                 // form INT__m_p_i_s
1112                 ostei_general_hrr_J(9, 1, 6, 0, hAB, HRR_INT__n_s_i_s, HRR_INT__m_s_i_s, HRR_INT__m_p_i_s);
1113 
1114                 // form INT__m_p_k_s
1115                 ostei_general_hrr_J(9, 1, 7, 0, hAB, HRR_INT__n_s_k_s, HRR_INT__m_s_k_s, HRR_INT__m_p_k_s);
1116 
1117                 // form INT__n_p_g_s
1118                 ostei_general_hrr_J(10, 1, 4, 0, hAB, HRR_INT__o_s_g_s, HRR_INT__n_s_g_s, HRR_INT__n_p_g_s);
1119 
1120                 // form INT__n_p_h_s
1121                 ostei_general_hrr_J(10, 1, 5, 0, hAB, HRR_INT__o_s_h_s, HRR_INT__n_s_h_s, HRR_INT__n_p_h_s);
1122 
1123                 // form INT__n_p_i_s
1124                 ostei_general_hrr_J(10, 1, 6, 0, hAB, HRR_INT__o_s_i_s, HRR_INT__n_s_i_s, HRR_INT__n_p_i_s);
1125 
1126                 // form INT__n_p_k_s
1127                 ostei_general_hrr_J(10, 1, 7, 0, hAB, HRR_INT__o_s_k_s, HRR_INT__n_s_k_s, HRR_INT__n_p_k_s);
1128 
1129                 // form INT__k_d_g_s
1130                 ostei_general_hrr_J(7, 2, 4, 0, hAB, HRR_INT__l_p_g_s, HRR_INT__k_p_g_s, HRR_INT__k_d_g_s);
1131 
1132                 // form INT__k_d_h_s
1133                 ostei_general_hrr_J(7, 2, 5, 0, hAB, HRR_INT__l_p_h_s, HRR_INT__k_p_h_s, HRR_INT__k_d_h_s);
1134 
1135                 // form INT__k_d_i_s
1136                 ostei_general_hrr_J(7, 2, 6, 0, hAB, HRR_INT__l_p_i_s, HRR_INT__k_p_i_s, HRR_INT__k_d_i_s);
1137 
1138                 // form INT__k_d_k_s
1139                 ostei_general_hrr_J(7, 2, 7, 0, hAB, HRR_INT__l_p_k_s, HRR_INT__k_p_k_s, HRR_INT__k_d_k_s);
1140 
1141                 // form INT__l_d_g_s
1142                 ostei_general_hrr_J(8, 2, 4, 0, hAB, HRR_INT__m_p_g_s, HRR_INT__l_p_g_s, HRR_INT__l_d_g_s);
1143 
1144                 // form INT__l_d_h_s
1145                 ostei_general_hrr_J(8, 2, 5, 0, hAB, HRR_INT__m_p_h_s, HRR_INT__l_p_h_s, HRR_INT__l_d_h_s);
1146 
1147                 // form INT__l_d_i_s
1148                 ostei_general_hrr_J(8, 2, 6, 0, hAB, HRR_INT__m_p_i_s, HRR_INT__l_p_i_s, HRR_INT__l_d_i_s);
1149 
1150                 // form INT__l_d_k_s
1151                 ostei_general_hrr_J(8, 2, 7, 0, hAB, HRR_INT__m_p_k_s, HRR_INT__l_p_k_s, HRR_INT__l_d_k_s);
1152 
1153                 // form INT__m_d_g_s
1154                 ostei_general_hrr_J(9, 2, 4, 0, hAB, HRR_INT__n_p_g_s, HRR_INT__m_p_g_s, HRR_INT__m_d_g_s);
1155 
1156                 // form INT__m_d_h_s
1157                 ostei_general_hrr_J(9, 2, 5, 0, hAB, HRR_INT__n_p_h_s, HRR_INT__m_p_h_s, HRR_INT__m_d_h_s);
1158 
1159                 // form INT__m_d_i_s
1160                 ostei_general_hrr_J(9, 2, 6, 0, hAB, HRR_INT__n_p_i_s, HRR_INT__m_p_i_s, HRR_INT__m_d_i_s);
1161 
1162                 // form INT__m_d_k_s
1163                 ostei_general_hrr_J(9, 2, 7, 0, hAB, HRR_INT__n_p_k_s, HRR_INT__m_p_k_s, HRR_INT__m_d_k_s);
1164 
1165                 // form INT__k_f_g_s
1166                 ostei_general_hrr_J(7, 3, 4, 0, hAB, HRR_INT__l_d_g_s, HRR_INT__k_d_g_s, HRR_INT__k_f_g_s);
1167 
1168                 // form INT__k_f_h_s
1169                 ostei_general_hrr_J(7, 3, 5, 0, hAB, HRR_INT__l_d_h_s, HRR_INT__k_d_h_s, HRR_INT__k_f_h_s);
1170 
1171                 // form INT__k_f_i_s
1172                 ostei_general_hrr_J(7, 3, 6, 0, hAB, HRR_INT__l_d_i_s, HRR_INT__k_d_i_s, HRR_INT__k_f_i_s);
1173 
1174                 // form INT__k_f_k_s
1175                 ostei_general_hrr_J(7, 3, 7, 0, hAB, HRR_INT__l_d_k_s, HRR_INT__k_d_k_s, HRR_INT__k_f_k_s);
1176 
1177                 // form INT__l_f_g_s
1178                 ostei_general_hrr_J(8, 3, 4, 0, hAB, HRR_INT__m_d_g_s, HRR_INT__l_d_g_s, HRR_INT__l_f_g_s);
1179 
1180                 // form INT__l_f_h_s
1181                 ostei_general_hrr_J(8, 3, 5, 0, hAB, HRR_INT__m_d_h_s, HRR_INT__l_d_h_s, HRR_INT__l_f_h_s);
1182 
1183                 // form INT__l_f_i_s
1184                 ostei_general_hrr_J(8, 3, 6, 0, hAB, HRR_INT__m_d_i_s, HRR_INT__l_d_i_s, HRR_INT__l_f_i_s);
1185 
1186                 // form INT__l_f_k_s
1187                 ostei_general_hrr_J(8, 3, 7, 0, hAB, HRR_INT__m_d_k_s, HRR_INT__l_d_k_s, HRR_INT__l_f_k_s);
1188 
1189                 // form INT__k_g_g_s
1190                 ostei_general_hrr_J(7, 4, 4, 0, hAB, HRR_INT__l_f_g_s, HRR_INT__k_f_g_s, HRR_INT__k_g_g_s);
1191 
1192                 // form INT__k_g_h_s
1193                 ostei_general_hrr_J(7, 4, 5, 0, hAB, HRR_INT__l_f_h_s, HRR_INT__k_f_h_s, HRR_INT__k_g_h_s);
1194 
1195                 // form INT__k_g_i_s
1196                 ostei_general_hrr_J(7, 4, 6, 0, hAB, HRR_INT__l_f_i_s, HRR_INT__k_f_i_s, HRR_INT__k_g_i_s);
1197 
1198                 // form INT__k_g_k_s
1199                 ostei_general_hrr_J(7, 4, 7, 0, hAB, HRR_INT__l_f_k_s, HRR_INT__k_f_k_s, HRR_INT__k_g_k_s);
1200 
1201                 // form INT__k_g_g_p
1202                 HRR_L_g_p(
1203                     HRR_INT__k_g_g_p,
1204                     HRR_INT__k_g_g_s,
1205                     HRR_INT__k_g_h_s,
1206                     hCD, 540);
1207 
1208                 // form INT__k_g_h_p
1209                 ostei_general_hrr_L(7, 4, 5, 1, hCD, HRR_INT__k_g_i_s, HRR_INT__k_g_h_s, HRR_INT__k_g_h_p);
1210 
1211                 // form INT__k_g_i_p
1212                 ostei_general_hrr_L(7, 4, 6, 1, hCD, HRR_INT__k_g_k_s, HRR_INT__k_g_i_s, HRR_INT__k_g_i_p);
1213 
1214                 // form INT__k_g_g_d
1215                 ostei_general_hrr_L(7, 4, 4, 2, hCD, HRR_INT__k_g_h_p, HRR_INT__k_g_g_p, HRR_INT__k_g_g_d);
1216 
1217                 // form INT__k_g_h_d
1218                 ostei_general_hrr_L(7, 4, 5, 2, hCD, HRR_INT__k_g_i_p, HRR_INT__k_g_h_p, HRR_INT__k_g_h_d);
1219 
1220                 // form INT__k_g_g_f
1221                 ostei_general_hrr_L(7, 4, 4, 3, hCD, HRR_INT__k_g_h_d, HRR_INT__k_g_g_d, HRR_INT__k_g_g_f);
1222 
1223 
1224             }  // close HRR loop
1225 
1226 
1227         }   // close loop cdbatch
1228 
1229         istart = iend;
1230     }  // close loop over ab
1231 
1232     return P.nshell12_clip * Q.nshell12_clip;
1233 }
1234 
ostei_g_k_g_f(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__g_k_g_f)1235 int ostei_g_k_g_f(struct simint_multi_shellpair const P,
1236                   struct simint_multi_shellpair const Q,
1237                   double screen_tol,
1238                   double * const restrict work,
1239                   double * const restrict INT__g_k_g_f)
1240 {
1241     double P_AB[3*P.nshell12];
1242     struct simint_multi_shellpair P_tmp = P;
1243     P_tmp.PA_x = P.PB_x;  P_tmp.PA_y = P.PB_y;  P_tmp.PA_z = P.PB_z;
1244     P_tmp.PB_x = P.PA_x;  P_tmp.PB_y = P.PA_y;  P_tmp.PB_z = P.PA_z;
1245     P_tmp.AB_x = P_AB;
1246     P_tmp.AB_y = P_AB + P.nshell12;
1247     P_tmp.AB_z = P_AB + 2*P.nshell12;
1248 
1249     for(int i = 0; i < P.nshell12; i++)
1250     {
1251         P_tmp.AB_x[i] = -P.AB_x[i];
1252         P_tmp.AB_y[i] = -P.AB_y[i];
1253         P_tmp.AB_z[i] = -P.AB_z[i];
1254     }
1255 
1256     int ret = ostei_k_g_g_f(P_tmp, Q, screen_tol, work, INT__g_k_g_f);
1257     double buffer[81000] SIMINT_ALIGN_ARRAY_DBL;
1258 
1259     for(int q = 0; q < ret; q++)
1260     {
1261         int idx = 0;
1262         for(int a = 0; a < 15; ++a)
1263         for(int b = 0; b < 36; ++b)
1264         for(int c = 0; c < 15; ++c)
1265         for(int d = 0; d < 10; ++d)
1266             buffer[idx++] = INT__g_k_g_f[q*81000+b*2250+a*150+c*10+d];
1267 
1268         memcpy(INT__g_k_g_f+q*81000, buffer, 81000*sizeof(double));
1269     }
1270 
1271     return ret;
1272 }
1273 
ostei_k_g_f_g(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__k_g_f_g)1274 int ostei_k_g_f_g(struct simint_multi_shellpair const P,
1275                   struct simint_multi_shellpair const Q,
1276                   double screen_tol,
1277                   double * const restrict work,
1278                   double * const restrict INT__k_g_f_g)
1279 {
1280     double Q_AB[3*Q.nshell12];
1281     struct simint_multi_shellpair Q_tmp = Q;
1282     Q_tmp.PA_x = Q.PB_x;  Q_tmp.PA_y = Q.PB_y;  Q_tmp.PA_z = Q.PB_z;
1283     Q_tmp.PB_x = Q.PA_x;  Q_tmp.PB_y = Q.PA_y;  Q_tmp.PB_z = Q.PA_z;
1284     Q_tmp.AB_x = Q_AB;
1285     Q_tmp.AB_y = Q_AB + Q.nshell12;
1286     Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1287 
1288     for(int i = 0; i < Q.nshell12; i++)
1289     {
1290         Q_tmp.AB_x[i] = -Q.AB_x[i];
1291         Q_tmp.AB_y[i] = -Q.AB_y[i];
1292         Q_tmp.AB_z[i] = -Q.AB_z[i];
1293     }
1294 
1295     int ret = ostei_k_g_g_f(P, Q_tmp, screen_tol, work, INT__k_g_f_g);
1296     double buffer[81000] SIMINT_ALIGN_ARRAY_DBL;
1297 
1298     for(int q = 0; q < ret; q++)
1299     {
1300         int idx = 0;
1301         for(int a = 0; a < 36; ++a)
1302         for(int b = 0; b < 15; ++b)
1303         for(int c = 0; c < 10; ++c)
1304         for(int d = 0; d < 15; ++d)
1305             buffer[idx++] = INT__k_g_f_g[q*81000+a*2250+b*150+d*10+c];
1306 
1307         memcpy(INT__k_g_f_g+q*81000, buffer, 81000*sizeof(double));
1308     }
1309 
1310     return ret;
1311 }
1312 
ostei_g_k_f_g(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__g_k_f_g)1313 int ostei_g_k_f_g(struct simint_multi_shellpair const P,
1314                   struct simint_multi_shellpair const Q,
1315                   double screen_tol,
1316                   double * const restrict work,
1317                   double * const restrict INT__g_k_f_g)
1318 {
1319     double P_AB[3*P.nshell12];
1320     struct simint_multi_shellpair P_tmp = P;
1321     P_tmp.PA_x = P.PB_x;  P_tmp.PA_y = P.PB_y;  P_tmp.PA_z = P.PB_z;
1322     P_tmp.PB_x = P.PA_x;  P_tmp.PB_y = P.PA_y;  P_tmp.PB_z = P.PA_z;
1323     P_tmp.AB_x = P_AB;
1324     P_tmp.AB_y = P_AB + P.nshell12;
1325     P_tmp.AB_z = P_AB + 2*P.nshell12;
1326 
1327     for(int i = 0; i < P.nshell12; i++)
1328     {
1329         P_tmp.AB_x[i] = -P.AB_x[i];
1330         P_tmp.AB_y[i] = -P.AB_y[i];
1331         P_tmp.AB_z[i] = -P.AB_z[i];
1332     }
1333 
1334     double Q_AB[3*Q.nshell12];
1335     struct simint_multi_shellpair Q_tmp = Q;
1336     Q_tmp.PA_x = Q.PB_x;  Q_tmp.PA_y = Q.PB_y;  Q_tmp.PA_z = Q.PB_z;
1337     Q_tmp.PB_x = Q.PA_x;  Q_tmp.PB_y = Q.PA_y;  Q_tmp.PB_z = Q.PA_z;
1338     Q_tmp.AB_x = Q_AB;
1339     Q_tmp.AB_y = Q_AB + Q.nshell12;
1340     Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1341 
1342     for(int i = 0; i < Q.nshell12; i++)
1343     {
1344         Q_tmp.AB_x[i] = -Q.AB_x[i];
1345         Q_tmp.AB_y[i] = -Q.AB_y[i];
1346         Q_tmp.AB_z[i] = -Q.AB_z[i];
1347     }
1348 
1349     int ret = ostei_k_g_g_f(P_tmp, Q_tmp, screen_tol, work, INT__g_k_f_g);
1350     double buffer[81000] SIMINT_ALIGN_ARRAY_DBL;
1351 
1352     for(int q = 0; q < ret; q++)
1353     {
1354         int idx = 0;
1355         for(int a = 0; a < 15; ++a)
1356         for(int b = 0; b < 36; ++b)
1357         for(int c = 0; c < 10; ++c)
1358         for(int d = 0; d < 15; ++d)
1359             buffer[idx++] = INT__g_k_f_g[q*81000+b*2250+a*150+d*10+c];
1360 
1361         memcpy(INT__g_k_f_g+q*81000, buffer, 81000*sizeof(double));
1362     }
1363 
1364     return ret;
1365 }
1366 
1367