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_f_d_f_d(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__f_d_f_d)8 int ostei_f_d_f_d(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__f_d_f_d)
13 {
14 
15     SIMINT_ASSUME_ALIGN_DBL(work);
16     SIMINT_ASSUME_ALIGN_DBL(INT__f_d_f_d);
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__f_s_f_s = work + (SIMINT_NSHELL_SIMD * 0);
30     double * const INT__f_s_g_s = work + (SIMINT_NSHELL_SIMD * 100);
31     double * const INT__f_s_h_s = work + (SIMINT_NSHELL_SIMD * 250);
32     double * const INT__g_s_f_s = work + (SIMINT_NSHELL_SIMD * 460);
33     double * const INT__g_s_g_s = work + (SIMINT_NSHELL_SIMD * 610);
34     double * const INT__g_s_h_s = work + (SIMINT_NSHELL_SIMD * 835);
35     double * const INT__h_s_f_s = work + (SIMINT_NSHELL_SIMD * 1150);
36     double * const INT__h_s_g_s = work + (SIMINT_NSHELL_SIMD * 1360);
37     double * const INT__h_s_h_s = work + (SIMINT_NSHELL_SIMD * 1675);
38     SIMINT_DBLTYPE * const primwork = (SIMINT_DBLTYPE *)(work + SIMINT_NSHELL_SIMD*2116);
39     SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_s_s = primwork + 0;
40     SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_p_s = primwork + 11;
41     SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_d_s = primwork + 26;
42     SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_s_s = primwork + 50;
43     SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_p_s = primwork + 80;
44     SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_d_s = primwork + 125;
45     SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_f_s = primwork + 197;
46     SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_s_s = primwork + 287;
47     SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_p_s = primwork + 341;
48     SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_d_s = primwork + 431;
49     SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_f_s = primwork + 575;
50     SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_g_s = primwork + 755;
51     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_s_s = primwork + 935;
52     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_p_s = primwork + 1015;
53     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_d_s = primwork + 1165;
54     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_f_s = primwork + 1405;
55     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_g_s = primwork + 1705;
56     SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_h_s = primwork + 2005;
57     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_s_s = primwork + 2215;
58     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_p_s = primwork + 2320;
59     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_d_s = primwork + 2545;
60     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_f_s = primwork + 2905;
61     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_g_s = primwork + 3355;
62     SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_h_s = primwork + 3805;
63     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_s_s = primwork + 4120;
64     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_p_s = primwork + 4246;
65     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_d_s = primwork + 4561;
66     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_f_s = primwork + 5065;
67     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_g_s = primwork + 5695;
68     SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_h_s = primwork + 6325;
69     double * const hrrwork = (double *)(primwork + 6766);
70     double * const HRR_INT__f_p_f_s = hrrwork + 0;
71     double * const HRR_INT__f_p_g_s = hrrwork + 300;
72     double * const HRR_INT__f_p_h_s = hrrwork + 750;
73     double * const HRR_INT__f_d_f_s = hrrwork + 1380;
74     double * const HRR_INT__f_d_f_p = hrrwork + 1980;
75     double * const HRR_INT__f_d_g_s = hrrwork + 3780;
76     double * const HRR_INT__f_d_g_p = hrrwork + 4680;
77     double * const HRR_INT__f_d_h_s = hrrwork + 7380;
78     double * const HRR_INT__g_p_f_s = hrrwork + 8640;
79     double * const HRR_INT__g_p_g_s = hrrwork + 9090;
80     double * const HRR_INT__g_p_h_s = hrrwork + 9765;
81 
82 
83     // Create constants
84     const SIMINT_DBLTYPE const_1 = SIMINT_DBLSET1(1);
85     const SIMINT_DBLTYPE const_2 = SIMINT_DBLSET1(2);
86     const SIMINT_DBLTYPE const_3 = SIMINT_DBLSET1(3);
87     const SIMINT_DBLTYPE const_4 = SIMINT_DBLSET1(4);
88     const SIMINT_DBLTYPE const_5 = SIMINT_DBLSET1(5);
89     const SIMINT_DBLTYPE one_half = SIMINT_DBLSET1(0.5);
90 
91 
92     ////////////////////////////////////////
93     // Loop over shells and primitives
94     ////////////////////////////////////////
95 
96     real_abcd = 0;
97     istart = 0;
98     for(ab = 0; ab < P.nshell12_clip; ++ab)
99     {
100         const int iend = istart + P.nprim12[ab];
101 
102         cd = 0;
103         jstart = 0;
104 
105         for(cd = 0; cd < Q.nshell12_clip; cd += SIMINT_NSHELL_SIMD)
106         {
107             const int nshellbatch = ((cd + SIMINT_NSHELL_SIMD) > Q.nshell12_clip) ? Q.nshell12_clip - cd : SIMINT_NSHELL_SIMD;
108             int jend = jstart;
109             for(i = 0; i < nshellbatch; i++)
110                 jend += Q.nprim12[cd+i];
111 
112             // Clear the beginning of the workspace (where we are accumulating integrals)
113             memset(work, 0, SIMINT_NSHELL_SIMD * 2116 * sizeof(double));
114             abcd = 0;
115 
116 
117             for(i = istart; i < iend; ++i)
118             {
119                 SIMINT_DBLTYPE bra_screen_max;  // only used if check_screen
120 
121                 if(check_screen)
122                 {
123                     // Skip this whole thing if always insignificant
124                     if((P.screen[i] * Q.screen_max) < screen_tol)
125                         continue;
126                     bra_screen_max = SIMINT_DBLSET1(P.screen[i]);
127                 }
128 
129                 icd = 0;
130                 iprimcd = 0;
131                 nprim_icd = Q.nprim12[cd];
132                 double * restrict PRIM_PTR_INT__f_s_f_s = INT__f_s_f_s + abcd * 100;
133                 double * restrict PRIM_PTR_INT__f_s_g_s = INT__f_s_g_s + abcd * 150;
134                 double * restrict PRIM_PTR_INT__f_s_h_s = INT__f_s_h_s + abcd * 210;
135                 double * restrict PRIM_PTR_INT__g_s_f_s = INT__g_s_f_s + abcd * 150;
136                 double * restrict PRIM_PTR_INT__g_s_g_s = INT__g_s_g_s + abcd * 225;
137                 double * restrict PRIM_PTR_INT__g_s_h_s = INT__g_s_h_s + abcd * 315;
138                 double * restrict PRIM_PTR_INT__h_s_f_s = INT__h_s_f_s + abcd * 210;
139                 double * restrict PRIM_PTR_INT__h_s_g_s = INT__h_s_g_s + abcd * 315;
140                 double * restrict PRIM_PTR_INT__h_s_h_s = INT__h_s_h_s + abcd * 441;
141 
142 
143 
144                 // Load these one per loop over i
145                 const SIMINT_DBLTYPE P_alpha = SIMINT_DBLSET1(P.alpha[i]);
146                 const SIMINT_DBLTYPE P_prefac = SIMINT_DBLSET1(P.prefac[i]);
147                 const SIMINT_DBLTYPE Pxyz[3] = { SIMINT_DBLSET1(P.x[i]), SIMINT_DBLSET1(P.y[i]), SIMINT_DBLSET1(P.z[i]) };
148 
149                 const SIMINT_DBLTYPE P_PA[3] = { SIMINT_DBLSET1(P.PA_x[i]), SIMINT_DBLSET1(P.PA_y[i]), SIMINT_DBLSET1(P.PA_z[i]) };
150 
151                 for(j = jstart; j < jend; j += SIMINT_SIMD_LEN)
152                 {
153                     // calculate the shell offsets
154                     // these are the offset from the shell pointed to by cd
155                     // for each element
156                     int shelloffsets[SIMINT_SIMD_LEN] = {0};
157                     int lastoffset = 0;
158                     const int nlane = ( ((j + SIMINT_SIMD_LEN) < jend) ? SIMINT_SIMD_LEN : (jend - j));
159 
160                     if((iprimcd + SIMINT_SIMD_LEN) >= nprim_icd)
161                     {
162                         // Handle if the first element of the vector is a new shell
163                         if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
164                         {
165                             nprim_icd += Q.nprim12[cd + (++icd)];
166                             PRIM_PTR_INT__f_s_f_s += 100;
167                             PRIM_PTR_INT__f_s_g_s += 150;
168                             PRIM_PTR_INT__f_s_h_s += 210;
169                             PRIM_PTR_INT__g_s_f_s += 150;
170                             PRIM_PTR_INT__g_s_g_s += 225;
171                             PRIM_PTR_INT__g_s_h_s += 315;
172                             PRIM_PTR_INT__h_s_f_s += 210;
173                             PRIM_PTR_INT__h_s_g_s += 315;
174                             PRIM_PTR_INT__h_s_h_s += 441;
175                         }
176                         iprimcd++;
177                         for(n = 1; n < SIMINT_SIMD_LEN; ++n)
178                         {
179                             if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
180                             {
181                                 shelloffsets[n] = shelloffsets[n-1] + 1;
182                                 lastoffset++;
183                                 nprim_icd += Q.nprim12[cd + (++icd)];
184                             }
185                             else
186                                 shelloffsets[n] = shelloffsets[n-1];
187                             iprimcd++;
188                         }
189                     }
190                     else
191                         iprimcd += SIMINT_SIMD_LEN;
192 
193                     // Do we have to compute this vector (or has it been screened out)?
194                     // (not_screened != 0 means we have to do this vector)
195                     if(check_screen)
196                     {
197                         const double vmax = vector_max(SIMINT_MUL(bra_screen_max, SIMINT_DBLLOAD(Q.screen, j)));
198                         if(vmax < screen_tol)
199                         {
200                             PRIM_PTR_INT__f_s_f_s += lastoffset*100;
201                             PRIM_PTR_INT__f_s_g_s += lastoffset*150;
202                             PRIM_PTR_INT__f_s_h_s += lastoffset*210;
203                             PRIM_PTR_INT__g_s_f_s += lastoffset*150;
204                             PRIM_PTR_INT__g_s_g_s += lastoffset*225;
205                             PRIM_PTR_INT__g_s_h_s += lastoffset*315;
206                             PRIM_PTR_INT__h_s_f_s += lastoffset*210;
207                             PRIM_PTR_INT__h_s_g_s += lastoffset*315;
208                             PRIM_PTR_INT__h_s_h_s += lastoffset*441;
209                             continue;
210                         }
211                     }
212 
213                     const SIMINT_DBLTYPE Q_alpha = SIMINT_DBLLOAD(Q.alpha, j);
214                     const SIMINT_DBLTYPE PQalpha_mul = SIMINT_MUL(P_alpha, Q_alpha);
215                     const SIMINT_DBLTYPE PQalpha_sum = SIMINT_ADD(P_alpha, Q_alpha);
216                     const SIMINT_DBLTYPE one_over_PQalpha_sum = SIMINT_DIV(const_1, PQalpha_sum);
217 
218 
219                     /* construct R2 = (Px - Qx)**2 + (Py - Qy)**2 + (Pz -Qz)**2 */
220                     SIMINT_DBLTYPE PQ[3];
221                     PQ[0] = SIMINT_SUB(Pxyz[0], SIMINT_DBLLOAD(Q.x, j));
222                     PQ[1] = SIMINT_SUB(Pxyz[1], SIMINT_DBLLOAD(Q.y, j));
223                     PQ[2] = SIMINT_SUB(Pxyz[2], SIMINT_DBLLOAD(Q.z, j));
224                     SIMINT_DBLTYPE R2 = SIMINT_MUL(PQ[0], PQ[0]);
225                     R2 = SIMINT_FMADD(PQ[1], PQ[1], R2);
226                     R2 = SIMINT_FMADD(PQ[2], PQ[2], R2);
227 
228                     const SIMINT_DBLTYPE alpha = SIMINT_MUL(PQalpha_mul, one_over_PQalpha_sum); // alpha from MEST
229                     const SIMINT_DBLTYPE one_over_p = SIMINT_DIV(const_1, P_alpha);
230                     const SIMINT_DBLTYPE one_over_q = SIMINT_DIV(const_1, Q_alpha);
231                     const SIMINT_DBLTYPE one_over_2p = SIMINT_MUL(one_half, one_over_p);
232                     const SIMINT_DBLTYPE one_over_2q = SIMINT_MUL(one_half, one_over_q);
233                     const SIMINT_DBLTYPE one_over_2pq = SIMINT_MUL(one_half, one_over_PQalpha_sum);
234                     const SIMINT_DBLTYPE Q_PA[3] = { SIMINT_DBLLOAD(Q.PA_x, j), SIMINT_DBLLOAD(Q.PA_y, j), SIMINT_DBLLOAD(Q.PA_z, j) };
235 
236                     // NOTE: Minus sign!
237                     const SIMINT_DBLTYPE a_over_p = SIMINT_MUL(SIMINT_NEG(alpha), one_over_p);
238                     SIMINT_DBLTYPE aop_PQ[3];
239                     aop_PQ[0] = SIMINT_MUL(a_over_p, PQ[0]);
240                     aop_PQ[1] = SIMINT_MUL(a_over_p, PQ[1]);
241                     aop_PQ[2] = SIMINT_MUL(a_over_p, PQ[2]);
242 
243                     SIMINT_DBLTYPE a_over_q = SIMINT_MUL(alpha, one_over_q);
244                     SIMINT_DBLTYPE aoq_PQ[3];
245                     aoq_PQ[0] = SIMINT_MUL(a_over_q, PQ[0]);
246                     aoq_PQ[1] = SIMINT_MUL(a_over_q, PQ[1]);
247                     aoq_PQ[2] = SIMINT_MUL(a_over_q, PQ[2]);
248                     // Put a minus sign here so we don't have to in RR routines
249                     a_over_q = SIMINT_NEG(a_over_q);
250 
251 
252                     //////////////////////////////////////////////
253                     // Fjt function section
254                     // Maximum v value: 10
255                     //////////////////////////////////////////////
256                     // The parameter to the Fjt function
257                     const SIMINT_DBLTYPE F_x = SIMINT_MUL(R2, alpha);
258 
259 
260                     const SIMINT_DBLTYPE Q_prefac = mask_load(nlane, Q.prefac + j);
261 
262 
263                     boys_F_split(PRIM_INT__s_s_s_s, F_x, 10);
264                     SIMINT_DBLTYPE prefac = SIMINT_SQRT(one_over_PQalpha_sum);
265                     prefac = SIMINT_MUL(SIMINT_MUL(P_prefac, Q_prefac), prefac);
266                     for(n = 0; n <= 10; n++)
267                         PRIM_INT__s_s_s_s[n] = SIMINT_MUL(PRIM_INT__s_s_s_s[n], prefac);
268 
269                     //////////////////////////////////////////////
270                     // Primitive integrals: Vertical recurrance
271                     //////////////////////////////////////////////
272 
273                     const SIMINT_DBLTYPE vrr_const_1_over_2p = one_over_2p;
274                     const SIMINT_DBLTYPE vrr_const_2_over_2p = SIMINT_MUL(const_2, one_over_2p);
275                     const SIMINT_DBLTYPE vrr_const_3_over_2p = SIMINT_MUL(const_3, one_over_2p);
276                     const SIMINT_DBLTYPE vrr_const_4_over_2p = SIMINT_MUL(const_4, one_over_2p);
277                     const SIMINT_DBLTYPE vrr_const_1_over_2q = one_over_2q;
278                     const SIMINT_DBLTYPE vrr_const_2_over_2q = SIMINT_MUL(const_2, one_over_2q);
279                     const SIMINT_DBLTYPE vrr_const_3_over_2q = SIMINT_MUL(const_3, one_over_2q);
280                     const SIMINT_DBLTYPE vrr_const_4_over_2q = SIMINT_MUL(const_4, one_over_2q);
281                     const SIMINT_DBLTYPE vrr_const_1_over_2pq = one_over_2pq;
282                     const SIMINT_DBLTYPE vrr_const_2_over_2pq = SIMINT_MUL(const_2, one_over_2pq);
283                     const SIMINT_DBLTYPE vrr_const_3_over_2pq = SIMINT_MUL(const_3, one_over_2pq);
284                     const SIMINT_DBLTYPE vrr_const_4_over_2pq = SIMINT_MUL(const_4, one_over_2pq);
285                     const SIMINT_DBLTYPE vrr_const_5_over_2pq = SIMINT_MUL(const_5, one_over_2pq);
286 
287 
288 
289                     // Forming PRIM_INT__p_s_s_s[10 * 3];
290                     for(n = 0; n < 10; ++n)  // loop over orders of auxiliary function
291                     {
292 
293                         PRIM_INT__p_s_s_s[n * 3 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
294                         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]);
295 
296                         PRIM_INT__p_s_s_s[n * 3 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
297                         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]);
298 
299                         PRIM_INT__p_s_s_s[n * 3 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
300                         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]);
301 
302                     }
303 
304 
305 
306                     // Forming PRIM_INT__d_s_s_s[9 * 6];
307                     for(n = 0; n < 9; ++n)  // loop over orders of auxiliary function
308                     {
309 
310                         PRIM_INT__d_s_s_s[n * 6 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
311                         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]);
312                         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]);
313 
314                         PRIM_INT__d_s_s_s[n * 6 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
315                         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]);
316 
317                         PRIM_INT__d_s_s_s[n * 6 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
318                         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]);
319 
320                         PRIM_INT__d_s_s_s[n * 6 + 3] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
321                         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]);
322                         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]);
323 
324                         PRIM_INT__d_s_s_s[n * 6 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
325                         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]);
326 
327                         PRIM_INT__d_s_s_s[n * 6 + 5] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
328                         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]);
329                         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]);
330 
331                     }
332 
333 
334 
335                     // Forming PRIM_INT__f_s_s_s[8 * 10];
336                     for(n = 0; n < 8; ++n)  // loop over orders of auxiliary function
337                     {
338 
339                         PRIM_INT__f_s_s_s[n * 10 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
340                         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]);
341                         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]);
342 
343                         PRIM_INT__f_s_s_s[n * 10 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
344                         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]);
345 
346                         PRIM_INT__f_s_s_s[n * 10 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
347                         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]);
348 
349                         PRIM_INT__f_s_s_s[n * 10 + 3] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
350                         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]);
351 
352                         PRIM_INT__f_s_s_s[n * 10 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
353                         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]);
354 
355                         PRIM_INT__f_s_s_s[n * 10 + 5] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
356                         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]);
357 
358                         PRIM_INT__f_s_s_s[n * 10 + 6] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
359                         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]);
360                         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]);
361 
362                         PRIM_INT__f_s_s_s[n * 10 + 7] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
363                         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]);
364 
365                         PRIM_INT__f_s_s_s[n * 10 + 8] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
366                         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]);
367 
368                         PRIM_INT__f_s_s_s[n * 10 + 9] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
369                         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]);
370                         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]);
371 
372                     }
373 
374 
375                     VRR_K_f_s_p_s(
376                             PRIM_INT__f_s_p_s,
377                             PRIM_INT__f_s_s_s,
378                             PRIM_INT__d_s_s_s,
379                             Q_PA,
380                             aoq_PQ,
381                             one_over_2pq,
382                             5);
383 
384 
385 
386                     // Forming PRIM_INT__d_s_p_s[5 * 18];
387                     for(n = 0; n < 5; ++n)  // loop over orders of auxiliary function
388                     {
389 
390                         PRIM_INT__d_s_p_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
391                         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]);
392                         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]);
393 
394                         PRIM_INT__d_s_p_s[n * 18 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
395                         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]);
396 
397                         PRIM_INT__d_s_p_s[n * 18 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
398                         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]);
399 
400                         PRIM_INT__d_s_p_s[n * 18 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 1]);
401                         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]);
402                         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]);
403 
404                         PRIM_INT__d_s_p_s[n * 18 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 1]);
405                         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]);
406                         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]);
407 
408                         PRIM_INT__d_s_p_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
409                         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]);
410 
411                         PRIM_INT__d_s_p_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 2]);
412                         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]);
413                         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]);
414 
415                         PRIM_INT__d_s_p_s[n * 18 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 2]);
416                         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]);
417 
418                         PRIM_INT__d_s_p_s[n * 18 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 2]);
419                         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]);
420                         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]);
421 
422                         PRIM_INT__d_s_p_s[n * 18 + 9] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
423                         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]);
424 
425                         PRIM_INT__d_s_p_s[n * 18 + 10] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
426                         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]);
427                         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]);
428 
429                         PRIM_INT__d_s_p_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
430                         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]);
431 
432                         PRIM_INT__d_s_p_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 4]);
433                         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]);
434 
435                         PRIM_INT__d_s_p_s[n * 18 + 13] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 4]);
436                         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]);
437                         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]);
438 
439                         PRIM_INT__d_s_p_s[n * 18 + 14] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 4]);
440                         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]);
441                         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]);
442 
443                         PRIM_INT__d_s_p_s[n * 18 + 15] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
444                         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]);
445 
446                         PRIM_INT__d_s_p_s[n * 18 + 16] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
447                         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]);
448 
449                         PRIM_INT__d_s_p_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
450                         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]);
451                         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]);
452 
453                     }
454 
455 
456                     VRR_K_f_s_d_s(
457                             PRIM_INT__f_s_d_s,
458                             PRIM_INT__f_s_p_s,
459                             PRIM_INT__f_s_s_s,
460                             PRIM_INT__d_s_p_s,
461                             Q_PA,
462                             a_over_q,
463                             aoq_PQ,
464                             one_over_2pq,
465                             one_over_2q,
466                             4);
467 
468 
469 
470                     // Forming PRIM_INT__p_s_p_s[5 * 9];
471                     for(n = 0; n < 5; ++n)  // loop over orders of auxiliary function
472                     {
473 
474                         PRIM_INT__p_s_p_s[n * 9 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
475                         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]);
476                         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]);
477 
478                         PRIM_INT__p_s_p_s[n * 9 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
479                         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]);
480 
481                         PRIM_INT__p_s_p_s[n * 9 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
482                         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]);
483 
484                         PRIM_INT__p_s_p_s[n * 9 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 1]);
485                         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]);
486 
487                         PRIM_INT__p_s_p_s[n * 9 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
488                         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]);
489                         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]);
490 
491                         PRIM_INT__p_s_p_s[n * 9 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
492                         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]);
493 
494                         PRIM_INT__p_s_p_s[n * 9 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 2]);
495                         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]);
496 
497                         PRIM_INT__p_s_p_s[n * 9 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 2]);
498                         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]);
499 
500                         PRIM_INT__p_s_p_s[n * 9 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
501                         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]);
502                         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]);
503 
504                     }
505 
506 
507                     VRR_K_d_s_d_s(
508                             PRIM_INT__d_s_d_s,
509                             PRIM_INT__d_s_p_s,
510                             PRIM_INT__d_s_s_s,
511                             PRIM_INT__p_s_p_s,
512                             Q_PA,
513                             a_over_q,
514                             aoq_PQ,
515                             one_over_2pq,
516                             one_over_2q,
517                             4);
518 
519 
520                     ostei_general_vrr_K(3, 0, 3, 0, 3,
521                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
522                             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);
523 
524 
525 
526                     // Forming PRIM_INT__s_s_p_s[5 * 3];
527                     for(n = 0; n < 5; ++n)  // loop over orders of auxiliary function
528                     {
529 
530                         PRIM_INT__s_s_p_s[n * 3 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
531                         PRIM_INT__s_s_p_s[n * 3 + 0] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_p_s[n * 3 + 0]);
532 
533                         PRIM_INT__s_s_p_s[n * 3 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
534                         PRIM_INT__s_s_p_s[n * 3 + 1] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_p_s[n * 3 + 1]);
535 
536                         PRIM_INT__s_s_p_s[n * 3 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
537                         PRIM_INT__s_s_p_s[n * 3 + 2] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_p_s[n * 3 + 2]);
538 
539                     }
540 
541 
542 
543                     // Forming PRIM_INT__p_s_d_s[4 * 18];
544                     for(n = 0; n < 4; ++n)  // loop over orders of auxiliary function
545                     {
546 
547                         PRIM_INT__p_s_d_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 0]);
548                         PRIM_INT__p_s_d_s[n * 18 + 0] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__p_s_p_s[(n+1) * 9 + 0], PRIM_INT__p_s_d_s[n * 18 + 0]);
549                         PRIM_INT__p_s_d_s[n * 18 + 0] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__p_s_s_s[n * 3 + 0]), PRIM_INT__p_s_d_s[n * 18 + 0]);
550                         PRIM_INT__p_s_d_s[n * 18 + 0] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__s_s_p_s[(n+1) * 3 + 0], PRIM_INT__p_s_d_s[n * 18 + 0]);
551 
552                         PRIM_INT__p_s_d_s[n * 18 + 3] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 1]);
553                         PRIM_INT__p_s_d_s[n * 18 + 3] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__p_s_p_s[(n+1) * 9 + 1], PRIM_INT__p_s_d_s[n * 18 + 3]);
554                         PRIM_INT__p_s_d_s[n * 18 + 3] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__p_s_s_s[n * 3 + 0]), PRIM_INT__p_s_d_s[n * 18 + 3]);
555 
556                         PRIM_INT__p_s_d_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 2]);
557                         PRIM_INT__p_s_d_s[n * 18 + 5] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__p_s_p_s[(n+1) * 9 + 2], PRIM_INT__p_s_d_s[n * 18 + 5]);
558                         PRIM_INT__p_s_d_s[n * 18 + 5] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 0], PRIM_INT__p_s_s_s[n * 3 + 0]), PRIM_INT__p_s_d_s[n * 18 + 5]);
559 
560                         PRIM_INT__p_s_d_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 3]);
561                         PRIM_INT__p_s_d_s[n * 18 + 6] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__p_s_p_s[(n+1) * 9 + 3], PRIM_INT__p_s_d_s[n * 18 + 6]);
562                         PRIM_INT__p_s_d_s[n * 18 + 6] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__p_s_s_s[n * 3 + 1]), PRIM_INT__p_s_d_s[n * 18 + 6]);
563 
564                         PRIM_INT__p_s_d_s[n * 18 + 9] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 4]);
565                         PRIM_INT__p_s_d_s[n * 18 + 9] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__p_s_p_s[(n+1) * 9 + 4], PRIM_INT__p_s_d_s[n * 18 + 9]);
566                         PRIM_INT__p_s_d_s[n * 18 + 9] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__p_s_s_s[n * 3 + 1]), PRIM_INT__p_s_d_s[n * 18 + 9]);
567                         PRIM_INT__p_s_d_s[n * 18 + 9] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__s_s_p_s[(n+1) * 3 + 1], PRIM_INT__p_s_d_s[n * 18 + 9]);
568 
569                         PRIM_INT__p_s_d_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 5]);
570                         PRIM_INT__p_s_d_s[n * 18 + 11] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__p_s_p_s[(n+1) * 9 + 5], PRIM_INT__p_s_d_s[n * 18 + 11]);
571                         PRIM_INT__p_s_d_s[n * 18 + 11] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 1], PRIM_INT__p_s_s_s[n * 3 + 1]), PRIM_INT__p_s_d_s[n * 18 + 11]);
572 
573                         PRIM_INT__p_s_d_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 6]);
574                         PRIM_INT__p_s_d_s[n * 18 + 12] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__p_s_p_s[(n+1) * 9 + 6], PRIM_INT__p_s_d_s[n * 18 + 12]);
575                         PRIM_INT__p_s_d_s[n * 18 + 12] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__p_s_s_s[n * 3 + 2]), PRIM_INT__p_s_d_s[n * 18 + 12]);
576 
577                         PRIM_INT__p_s_d_s[n * 18 + 15] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 7]);
578                         PRIM_INT__p_s_d_s[n * 18 + 15] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__p_s_p_s[(n+1) * 9 + 7], PRIM_INT__p_s_d_s[n * 18 + 15]);
579                         PRIM_INT__p_s_d_s[n * 18 + 15] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__p_s_s_s[n * 3 + 2]), PRIM_INT__p_s_d_s[n * 18 + 15]);
580 
581                         PRIM_INT__p_s_d_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 8]);
582                         PRIM_INT__p_s_d_s[n * 18 + 17] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__p_s_p_s[(n+1) * 9 + 8], PRIM_INT__p_s_d_s[n * 18 + 17]);
583                         PRIM_INT__p_s_d_s[n * 18 + 17] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__p_s_s_s[(n+1) * 3 + 2], PRIM_INT__p_s_s_s[n * 3 + 2]), PRIM_INT__p_s_d_s[n * 18 + 17]);
584                         PRIM_INT__p_s_d_s[n * 18 + 17] = SIMINT_FMADD( vrr_const_1_over_2pq, PRIM_INT__s_s_p_s[(n+1) * 3 + 2], PRIM_INT__p_s_d_s[n * 18 + 17]);
585 
586                     }
587 
588 
589                     VRR_K_d_s_f_s(
590                             PRIM_INT__d_s_f_s,
591                             PRIM_INT__d_s_d_s,
592                             PRIM_INT__d_s_p_s,
593                             PRIM_INT__p_s_d_s,
594                             Q_PA,
595                             a_over_q,
596                             aoq_PQ,
597                             one_over_2pq,
598                             one_over_2q,
599                             3);
600 
601 
602                     ostei_general_vrr_K(3, 0, 4, 0, 2,
603                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
604                             PRIM_INT__f_s_f_s, PRIM_INT__f_s_d_s, NULL, PRIM_INT__d_s_f_s, NULL, PRIM_INT__f_s_g_s);
605 
606 
607                     VRR_I_g_s_s_s(
608                             PRIM_INT__g_s_s_s,
609                             PRIM_INT__f_s_s_s,
610                             PRIM_INT__d_s_s_s,
611                             P_PA,
612                             a_over_p,
613                             aop_PQ,
614                             one_over_2p,
615                             7);
616 
617 
618                     VRR_K_g_s_p_s(
619                             PRIM_INT__g_s_p_s,
620                             PRIM_INT__g_s_s_s,
621                             PRIM_INT__f_s_s_s,
622                             Q_PA,
623                             aoq_PQ,
624                             one_over_2pq,
625                             5);
626 
627 
628                     ostei_general_vrr_K(4, 0, 2, 0, 4,
629                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
630                             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);
631 
632 
633                     ostei_general_vrr_K(4, 0, 3, 0, 3,
634                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
635                             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);
636 
637 
638 
639                     // Forming PRIM_INT__s_s_d_s[4 * 6];
640                     for(n = 0; n < 4; ++n)  // loop over orders of auxiliary function
641                     {
642 
643                         PRIM_INT__s_s_d_s[n * 6 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_p_s[n * 3 + 0]);
644                         PRIM_INT__s_s_d_s[n * 6 + 0] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__s_s_p_s[(n+1) * 3 + 0], PRIM_INT__s_s_d_s[n * 6 + 0]);
645                         PRIM_INT__s_s_d_s[n * 6 + 0] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__s_s_d_s[n * 6 + 0]);
646 
647                         PRIM_INT__s_s_d_s[n * 6 + 3] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_p_s[n * 3 + 1]);
648                         PRIM_INT__s_s_d_s[n * 6 + 3] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__s_s_p_s[(n+1) * 3 + 1], PRIM_INT__s_s_d_s[n * 6 + 3]);
649                         PRIM_INT__s_s_d_s[n * 6 + 3] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__s_s_d_s[n * 6 + 3]);
650 
651                         PRIM_INT__s_s_d_s[n * 6 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_p_s[n * 3 + 2]);
652                         PRIM_INT__s_s_d_s[n * 6 + 5] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__s_s_p_s[(n+1) * 3 + 2], PRIM_INT__s_s_d_s[n * 6 + 5]);
653                         PRIM_INT__s_s_d_s[n * 6 + 5] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__s_s_d_s[n * 6 + 5]);
654 
655                     }
656 
657 
658                     VRR_K_p_s_f_s(
659                             PRIM_INT__p_s_f_s,
660                             PRIM_INT__p_s_d_s,
661                             PRIM_INT__p_s_p_s,
662                             PRIM_INT__s_s_d_s,
663                             Q_PA,
664                             a_over_q,
665                             aoq_PQ,
666                             one_over_2pq,
667                             one_over_2q,
668                             3);
669 
670 
671                     ostei_general_vrr_K(2, 0, 4, 0, 2,
672                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
673                             PRIM_INT__d_s_f_s, PRIM_INT__d_s_d_s, NULL, PRIM_INT__p_s_f_s, NULL, PRIM_INT__d_s_g_s);
674 
675 
676                     ostei_general_vrr_K(3, 0, 5, 0, 1,
677                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
678                             PRIM_INT__f_s_g_s, PRIM_INT__f_s_f_s, NULL, PRIM_INT__d_s_g_s, NULL, PRIM_INT__f_s_h_s);
679 
680 
681                     ostei_general_vrr_K(4, 0, 4, 0, 2,
682                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
683                             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);
684 
685 
686                     VRR_I_h_s_s_s(
687                             PRIM_INT__h_s_s_s,
688                             PRIM_INT__g_s_s_s,
689                             PRIM_INT__f_s_s_s,
690                             P_PA,
691                             a_over_p,
692                             aop_PQ,
693                             one_over_2p,
694                             6);
695 
696 
697                     ostei_general_vrr_K(5, 0, 1, 0, 5,
698                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
699                             PRIM_INT__h_s_s_s, NULL, NULL, PRIM_INT__g_s_s_s, NULL, PRIM_INT__h_s_p_s);
700 
701 
702                     ostei_general_vrr_K(5, 0, 2, 0, 4,
703                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
704                             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);
705 
706 
707                     ostei_general_vrr_K(5, 0, 3, 0, 3,
708                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
709                             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);
710 
711 
712                     ostei_general_vrr_K(4, 0, 5, 0, 1,
713                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
714                             PRIM_INT__g_s_g_s, PRIM_INT__g_s_f_s, NULL, PRIM_INT__f_s_g_s, NULL, PRIM_INT__g_s_h_s);
715 
716 
717                     ostei_general_vrr_K(5, 0, 4, 0, 2,
718                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
719                             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);
720 
721 
722                     ostei_general_vrr_K(5, 0, 5, 0, 1,
723                             one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
724                             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);
725 
726 
727 
728 
729                     ////////////////////////////////////
730                     // Accumulate contracted integrals
731                     ////////////////////////////////////
732                     if(lastoffset == 0)
733                     {
734                         contract_all(100, PRIM_INT__f_s_f_s, PRIM_PTR_INT__f_s_f_s);
735                         contract_all(150, PRIM_INT__f_s_g_s, PRIM_PTR_INT__f_s_g_s);
736                         contract_all(210, PRIM_INT__f_s_h_s, PRIM_PTR_INT__f_s_h_s);
737                         contract_all(150, PRIM_INT__g_s_f_s, PRIM_PTR_INT__g_s_f_s);
738                         contract_all(225, PRIM_INT__g_s_g_s, PRIM_PTR_INT__g_s_g_s);
739                         contract_all(315, PRIM_INT__g_s_h_s, PRIM_PTR_INT__g_s_h_s);
740                         contract_all(210, PRIM_INT__h_s_f_s, PRIM_PTR_INT__h_s_f_s);
741                         contract_all(315, PRIM_INT__h_s_g_s, PRIM_PTR_INT__h_s_g_s);
742                         contract_all(441, PRIM_INT__h_s_h_s, PRIM_PTR_INT__h_s_h_s);
743                     }
744                     else
745                     {
746                         contract(100, shelloffsets, PRIM_INT__f_s_f_s, PRIM_PTR_INT__f_s_f_s);
747                         contract(150, shelloffsets, PRIM_INT__f_s_g_s, PRIM_PTR_INT__f_s_g_s);
748                         contract(210, shelloffsets, PRIM_INT__f_s_h_s, PRIM_PTR_INT__f_s_h_s);
749                         contract(150, shelloffsets, PRIM_INT__g_s_f_s, PRIM_PTR_INT__g_s_f_s);
750                         contract(225, shelloffsets, PRIM_INT__g_s_g_s, PRIM_PTR_INT__g_s_g_s);
751                         contract(315, shelloffsets, PRIM_INT__g_s_h_s, PRIM_PTR_INT__g_s_h_s);
752                         contract(210, shelloffsets, PRIM_INT__h_s_f_s, PRIM_PTR_INT__h_s_f_s);
753                         contract(315, shelloffsets, PRIM_INT__h_s_g_s, PRIM_PTR_INT__h_s_g_s);
754                         contract(441, shelloffsets, PRIM_INT__h_s_h_s, PRIM_PTR_INT__h_s_h_s);
755                         PRIM_PTR_INT__f_s_f_s += lastoffset*100;
756                         PRIM_PTR_INT__f_s_g_s += lastoffset*150;
757                         PRIM_PTR_INT__f_s_h_s += lastoffset*210;
758                         PRIM_PTR_INT__g_s_f_s += lastoffset*150;
759                         PRIM_PTR_INT__g_s_g_s += lastoffset*225;
760                         PRIM_PTR_INT__g_s_h_s += lastoffset*315;
761                         PRIM_PTR_INT__h_s_f_s += lastoffset*210;
762                         PRIM_PTR_INT__h_s_g_s += lastoffset*315;
763                         PRIM_PTR_INT__h_s_h_s += lastoffset*441;
764                     }
765 
766                 }  // close loop over j
767             }  // close loop over i
768 
769             //Advance to the next batch
770             jstart = SIMINT_SIMD_ROUND(jend);
771 
772             //////////////////////////////////////////////
773             // Contracted integrals: Horizontal recurrance
774             //////////////////////////////////////////////
775 
776 
777             const double hAB[3] = { P.AB_x[ab], P.AB_y[ab], P.AB_z[ab] };
778 
779 
780             for(abcd = 0; abcd < nshellbatch; ++abcd, ++real_abcd)
781             {
782                 const double hCD[3] = { Q.AB_x[cd+abcd], Q.AB_y[cd+abcd], Q.AB_z[cd+abcd] };
783 
784                 // set up HRR pointers
785                 double const * restrict HRR_INT__f_s_f_s = INT__f_s_f_s + abcd * 100;
786                 double const * restrict HRR_INT__f_s_g_s = INT__f_s_g_s + abcd * 150;
787                 double const * restrict HRR_INT__f_s_h_s = INT__f_s_h_s + abcd * 210;
788                 double const * restrict HRR_INT__g_s_f_s = INT__g_s_f_s + abcd * 150;
789                 double const * restrict HRR_INT__g_s_g_s = INT__g_s_g_s + abcd * 225;
790                 double const * restrict HRR_INT__g_s_h_s = INT__g_s_h_s + abcd * 315;
791                 double const * restrict HRR_INT__h_s_f_s = INT__h_s_f_s + abcd * 210;
792                 double const * restrict HRR_INT__h_s_g_s = INT__h_s_g_s + abcd * 315;
793                 double const * restrict HRR_INT__h_s_h_s = INT__h_s_h_s + abcd * 441;
794                 double * restrict HRR_INT__f_d_f_d = INT__f_d_f_d + real_abcd * 3600;
795 
796                 // form INT__f_p_f_s
797                 HRR_J_f_p(
798                     HRR_INT__f_p_f_s,
799                     HRR_INT__f_s_f_s,
800                     HRR_INT__g_s_f_s,
801                     hAB, 10);
802 
803                 // form INT__f_p_g_s
804                 HRR_J_f_p(
805                     HRR_INT__f_p_g_s,
806                     HRR_INT__f_s_g_s,
807                     HRR_INT__g_s_g_s,
808                     hAB, 15);
809 
810                 // form INT__f_p_h_s
811                 HRR_J_f_p(
812                     HRR_INT__f_p_h_s,
813                     HRR_INT__f_s_h_s,
814                     HRR_INT__g_s_h_s,
815                     hAB, 21);
816 
817                 // form INT__g_p_f_s
818                 HRR_J_g_p(
819                     HRR_INT__g_p_f_s,
820                     HRR_INT__g_s_f_s,
821                     HRR_INT__h_s_f_s,
822                     hAB, 10);
823 
824                 // form INT__g_p_g_s
825                 HRR_J_g_p(
826                     HRR_INT__g_p_g_s,
827                     HRR_INT__g_s_g_s,
828                     HRR_INT__h_s_g_s,
829                     hAB, 15);
830 
831                 // form INT__g_p_h_s
832                 HRR_J_g_p(
833                     HRR_INT__g_p_h_s,
834                     HRR_INT__g_s_h_s,
835                     HRR_INT__h_s_h_s,
836                     hAB, 21);
837 
838                 // form INT__f_d_f_s
839                 HRR_J_f_d(
840                     HRR_INT__f_d_f_s,
841                     HRR_INT__f_p_f_s,
842                     HRR_INT__g_p_f_s,
843                     hAB, 10);
844 
845                 // form INT__f_d_g_s
846                 HRR_J_f_d(
847                     HRR_INT__f_d_g_s,
848                     HRR_INT__f_p_g_s,
849                     HRR_INT__g_p_g_s,
850                     hAB, 15);
851 
852                 // form INT__f_d_h_s
853                 HRR_J_f_d(
854                     HRR_INT__f_d_h_s,
855                     HRR_INT__f_p_h_s,
856                     HRR_INT__g_p_h_s,
857                     hAB, 21);
858 
859                 // form INT__f_d_f_p
860                 HRR_L_f_p(
861                     HRR_INT__f_d_f_p,
862                     HRR_INT__f_d_f_s,
863                     HRR_INT__f_d_g_s,
864                     hCD, 60);
865 
866                 // form INT__f_d_g_p
867                 HRR_L_g_p(
868                     HRR_INT__f_d_g_p,
869                     HRR_INT__f_d_g_s,
870                     HRR_INT__f_d_h_s,
871                     hCD, 60);
872 
873                 // form INT__f_d_f_d
874                 HRR_L_f_d(
875                     HRR_INT__f_d_f_d,
876                     HRR_INT__f_d_f_p,
877                     HRR_INT__f_d_g_p,
878                     hCD, 60);
879 
880 
881             }  // close HRR loop
882 
883 
884         }   // close loop cdbatch
885 
886         istart = iend;
887     }  // close loop over ab
888 
889     return P.nshell12_clip * Q.nshell12_clip;
890 }
891 
892