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_k_k_s(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__k_k_k_s)8 int ostei_k_k_k_s(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_k_k_s)
13 {
14
15 SIMINT_ASSUME_ALIGN_DBL(work);
16 SIMINT_ASSUME_ALIGN_DBL(INT__k_k_k_s);
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
27 // partition workspace
28 double * const INT__k_s_k_s = work + (SIMINT_NSHELL_SIMD * 0);
29 double * const INT__l_s_k_s = work + (SIMINT_NSHELL_SIMD * 1296);
30 double * const INT__m_s_k_s = work + (SIMINT_NSHELL_SIMD * 2916);
31 double * const INT__n_s_k_s = work + (SIMINT_NSHELL_SIMD * 4896);
32 double * const INT__o_s_k_s = work + (SIMINT_NSHELL_SIMD * 7272);
33 double * const INT__q_s_k_s = work + (SIMINT_NSHELL_SIMD * 10080);
34 double * const INT__r_s_k_s = work + (SIMINT_NSHELL_SIMD * 13356);
35 double * const INT__t_s_k_s = work + (SIMINT_NSHELL_SIMD * 17136);
36 SIMINT_DBLTYPE * const primwork = (SIMINT_DBLTYPE *)(work + SIMINT_NSHELL_SIMD*21456);
37 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_s_s = primwork + 0;
38 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_s_s = primwork + 22;
39 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_p_s = primwork + 85;
40 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_s_s = primwork + 148;
41 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_p_s = primwork + 268;
42 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_d_s = primwork + 394;
43 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_s_s = primwork + 610;
44 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_p_s = primwork + 800;
45 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_d_s = primwork + 1010;
46 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_f_s = primwork + 1370;
47 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_s_s = primwork + 1870;
48 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_p_s = primwork + 2140;
49 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_d_s = primwork + 2455;
50 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_f_s = primwork + 2995;
51 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_g_s = primwork + 3745;
52 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_s_s = primwork + 4645;
53 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_p_s = primwork + 5002;
54 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_d_s = primwork + 5443;
55 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_f_s = primwork + 6199;
56 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_g_s = primwork + 7249;
57 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_h_s = primwork + 8509;
58 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_s_s = primwork + 9832;
59 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_p_s = primwork + 10280;
60 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_d_s = primwork + 10868;
61 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_f_s = primwork + 11876;
62 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_g_s = primwork + 13276;
63 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_h_s = primwork + 14956;
64 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_i_s = primwork + 16720;
65 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_s_s = primwork + 18288;
66 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_p_s = primwork + 18828;
67 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_d_s = primwork + 19584;
68 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_f_s = primwork + 20880;
69 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_g_s = primwork + 22680;
70 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_h_s = primwork + 24840;
71 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_i_s = primwork + 27108;
72 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_k_s = primwork + 29124;
73 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_s_s = primwork + 30420;
74 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_p_s = primwork + 31050;
75 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_d_s = primwork + 31995;
76 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_f_s = primwork + 33615;
77 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_g_s = primwork + 35865;
78 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_h_s = primwork + 38565;
79 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_i_s = primwork + 41400;
80 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_k_s = primwork + 43920;
81 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_s_s = primwork + 45540;
82 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_p_s = primwork + 46255;
83 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_d_s = primwork + 47410;
84 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_f_s = primwork + 49390;
85 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_g_s = primwork + 52140;
86 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_h_s = primwork + 55440;
87 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_i_s = primwork + 58905;
88 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_k_s = primwork + 61985;
89 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_s_s = primwork + 63965;
90 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_p_s = primwork + 64757;
91 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_d_s = primwork + 66143;
92 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_f_s = primwork + 68519;
93 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_g_s = primwork + 71819;
94 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_h_s = primwork + 75779;
95 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_i_s = primwork + 79937;
96 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_k_s = primwork + 83633;
97 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_s_s = primwork + 86009;
98 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_p_s = primwork + 86867;
99 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_d_s = primwork + 88505;
100 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_f_s = primwork + 91313;
101 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_g_s = primwork + 95213;
102 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_h_s = primwork + 99893;
103 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_i_s = primwork + 104807;
104 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_k_s = primwork + 109175;
105 SIMINT_DBLTYPE * const restrict PRIM_INT__q_s_s_s = primwork + 111983;
106 SIMINT_DBLTYPE * const restrict PRIM_INT__q_s_p_s = primwork + 112893;
107 SIMINT_DBLTYPE * const restrict PRIM_INT__q_s_d_s = primwork + 114804;
108 SIMINT_DBLTYPE * const restrict PRIM_INT__q_s_f_s = primwork + 118080;
109 SIMINT_DBLTYPE * const restrict PRIM_INT__q_s_g_s = primwork + 122630;
110 SIMINT_DBLTYPE * const restrict PRIM_INT__q_s_h_s = primwork + 128090;
111 SIMINT_DBLTYPE * const restrict PRIM_INT__q_s_i_s = primwork + 133823;
112 SIMINT_DBLTYPE * const restrict PRIM_INT__q_s_k_s = primwork + 138919;
113 SIMINT_DBLTYPE * const restrict PRIM_INT__r_s_s_s = primwork + 142195;
114 SIMINT_DBLTYPE * const restrict PRIM_INT__r_s_p_s = primwork + 143140;
115 SIMINT_DBLTYPE * const restrict PRIM_INT__r_s_d_s = primwork + 145345;
116 SIMINT_DBLTYPE * const restrict PRIM_INT__r_s_f_s = primwork + 149125;
117 SIMINT_DBLTYPE * const restrict PRIM_INT__r_s_g_s = primwork + 154375;
118 SIMINT_DBLTYPE * const restrict PRIM_INT__r_s_h_s = primwork + 160675;
119 SIMINT_DBLTYPE * const restrict PRIM_INT__r_s_i_s = primwork + 167290;
120 SIMINT_DBLTYPE * const restrict PRIM_INT__r_s_k_s = primwork + 173170;
121 SIMINT_DBLTYPE * const restrict PRIM_INT__t_s_s_s = primwork + 176950;
122 SIMINT_DBLTYPE * const restrict PRIM_INT__t_s_p_s = primwork + 177910;
123 SIMINT_DBLTYPE * const restrict PRIM_INT__t_s_d_s = primwork + 180430;
124 SIMINT_DBLTYPE * const restrict PRIM_INT__t_s_f_s = primwork + 184750;
125 SIMINT_DBLTYPE * const restrict PRIM_INT__t_s_g_s = primwork + 190750;
126 SIMINT_DBLTYPE * const restrict PRIM_INT__t_s_h_s = primwork + 197950;
127 SIMINT_DBLTYPE * const restrict PRIM_INT__t_s_i_s = primwork + 205510;
128 SIMINT_DBLTYPE * const restrict PRIM_INT__t_s_k_s = primwork + 212230;
129 double * const hrrwork = (double *)(primwork + 216550);
130 double * const HRR_INT__k_p_k_s = hrrwork + 0;
131 double * const HRR_INT__k_d_k_s = hrrwork + 3888;
132 double * const HRR_INT__k_f_k_s = hrrwork + 11664;
133 double * const HRR_INT__k_g_k_s = hrrwork + 24624;
134 double * const HRR_INT__k_h_k_s = hrrwork + 44064;
135 double * const HRR_INT__k_i_k_s = hrrwork + 71280;
136 double * const HRR_INT__l_p_k_s = hrrwork + 107568;
137 double * const HRR_INT__l_d_k_s = hrrwork + 112428;
138 double * const HRR_INT__l_f_k_s = hrrwork + 122148;
139 double * const HRR_INT__l_g_k_s = hrrwork + 138348;
140 double * const HRR_INT__l_h_k_s = hrrwork + 162648;
141 double * const HRR_INT__l_i_k_s = hrrwork + 196668;
142 double * const HRR_INT__m_p_k_s = hrrwork + 242028;
143 double * const HRR_INT__m_d_k_s = hrrwork + 247968;
144 double * const HRR_INT__m_f_k_s = hrrwork + 259848;
145 double * const HRR_INT__m_g_k_s = hrrwork + 279648;
146 double * const HRR_INT__m_h_k_s = hrrwork + 309348;
147 double * const HRR_INT__n_p_k_s = hrrwork + 350928;
148 double * const HRR_INT__n_d_k_s = hrrwork + 358056;
149 double * const HRR_INT__n_f_k_s = hrrwork + 372312;
150 double * const HRR_INT__n_g_k_s = hrrwork + 396072;
151 double * const HRR_INT__o_p_k_s = hrrwork + 431712;
152 double * const HRR_INT__o_d_k_s = hrrwork + 440136;
153 double * const HRR_INT__o_f_k_s = hrrwork + 456984;
154 double * const HRR_INT__q_p_k_s = hrrwork + 485064;
155 double * const HRR_INT__q_d_k_s = hrrwork + 494892;
156 double * const HRR_INT__r_p_k_s = hrrwork + 514548;
157
158
159 // Create constants
160 const SIMINT_DBLTYPE const_1 = SIMINT_DBLSET1(1);
161 const SIMINT_DBLTYPE const_10 = SIMINT_DBLSET1(10);
162 const SIMINT_DBLTYPE const_11 = SIMINT_DBLSET1(11);
163 const SIMINT_DBLTYPE const_12 = SIMINT_DBLSET1(12);
164 const SIMINT_DBLTYPE const_13 = SIMINT_DBLSET1(13);
165 const SIMINT_DBLTYPE const_14 = SIMINT_DBLSET1(14);
166 const SIMINT_DBLTYPE const_2 = SIMINT_DBLSET1(2);
167 const SIMINT_DBLTYPE const_3 = SIMINT_DBLSET1(3);
168 const SIMINT_DBLTYPE const_4 = SIMINT_DBLSET1(4);
169 const SIMINT_DBLTYPE const_5 = SIMINT_DBLSET1(5);
170 const SIMINT_DBLTYPE const_6 = SIMINT_DBLSET1(6);
171 const SIMINT_DBLTYPE const_7 = SIMINT_DBLSET1(7);
172 const SIMINT_DBLTYPE const_8 = SIMINT_DBLSET1(8);
173 const SIMINT_DBLTYPE const_9 = SIMINT_DBLSET1(9);
174 const SIMINT_DBLTYPE one_half = SIMINT_DBLSET1(0.5);
175
176
177 ////////////////////////////////////////
178 // Loop over shells and primitives
179 ////////////////////////////////////////
180
181 real_abcd = 0;
182 istart = 0;
183 for(ab = 0; ab < P.nshell12_clip; ++ab)
184 {
185 const int iend = istart + P.nprim12[ab];
186
187 cd = 0;
188 jstart = 0;
189
190 for(cd = 0; cd < Q.nshell12_clip; cd += SIMINT_NSHELL_SIMD)
191 {
192 const int nshellbatch = ((cd + SIMINT_NSHELL_SIMD) > Q.nshell12_clip) ? Q.nshell12_clip - cd : SIMINT_NSHELL_SIMD;
193 int jend = jstart;
194 for(i = 0; i < nshellbatch; i++)
195 jend += Q.nprim12[cd+i];
196
197 // Clear the beginning of the workspace (where we are accumulating integrals)
198 memset(work, 0, SIMINT_NSHELL_SIMD * 21456 * sizeof(double));
199 abcd = 0;
200
201
202 for(i = istart; i < iend; ++i)
203 {
204 SIMINT_DBLTYPE bra_screen_max; // only used if check_screen
205
206 if(check_screen)
207 {
208 // Skip this whole thing if always insignificant
209 if((P.screen[i] * Q.screen_max) < screen_tol)
210 continue;
211 bra_screen_max = SIMINT_DBLSET1(P.screen[i]);
212 }
213
214 icd = 0;
215 iprimcd = 0;
216 nprim_icd = Q.nprim12[cd];
217 double * restrict PRIM_PTR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
218 double * restrict PRIM_PTR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
219 double * restrict PRIM_PTR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
220 double * restrict PRIM_PTR_INT__n_s_k_s = INT__n_s_k_s + abcd * 2376;
221 double * restrict PRIM_PTR_INT__o_s_k_s = INT__o_s_k_s + abcd * 2808;
222 double * restrict PRIM_PTR_INT__q_s_k_s = INT__q_s_k_s + abcd * 3276;
223 double * restrict PRIM_PTR_INT__r_s_k_s = INT__r_s_k_s + abcd * 3780;
224 double * restrict PRIM_PTR_INT__t_s_k_s = INT__t_s_k_s + abcd * 4320;
225
226
227
228 // Load these one per loop over i
229 const SIMINT_DBLTYPE P_alpha = SIMINT_DBLSET1(P.alpha[i]);
230 const SIMINT_DBLTYPE P_prefac = SIMINT_DBLSET1(P.prefac[i]);
231 const SIMINT_DBLTYPE Pxyz[3] = { SIMINT_DBLSET1(P.x[i]), SIMINT_DBLSET1(P.y[i]), SIMINT_DBLSET1(P.z[i]) };
232
233 const SIMINT_DBLTYPE P_PA[3] = { SIMINT_DBLSET1(P.PA_x[i]), SIMINT_DBLSET1(P.PA_y[i]), SIMINT_DBLSET1(P.PA_z[i]) };
234
235 for(j = jstart; j < jend; j += SIMINT_SIMD_LEN)
236 {
237 // calculate the shell offsets
238 // these are the offset from the shell pointed to by cd
239 // for each element
240 int shelloffsets[SIMINT_SIMD_LEN] = {0};
241 int lastoffset = 0;
242 const int nlane = ( ((j + SIMINT_SIMD_LEN) < jend) ? SIMINT_SIMD_LEN : (jend - j));
243
244 if((iprimcd + SIMINT_SIMD_LEN) >= nprim_icd)
245 {
246 // Handle if the first element of the vector is a new shell
247 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
248 {
249 nprim_icd += Q.nprim12[cd + (++icd)];
250 PRIM_PTR_INT__k_s_k_s += 1296;
251 PRIM_PTR_INT__l_s_k_s += 1620;
252 PRIM_PTR_INT__m_s_k_s += 1980;
253 PRIM_PTR_INT__n_s_k_s += 2376;
254 PRIM_PTR_INT__o_s_k_s += 2808;
255 PRIM_PTR_INT__q_s_k_s += 3276;
256 PRIM_PTR_INT__r_s_k_s += 3780;
257 PRIM_PTR_INT__t_s_k_s += 4320;
258 }
259 iprimcd++;
260 for(n = 1; n < SIMINT_SIMD_LEN; ++n)
261 {
262 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
263 {
264 shelloffsets[n] = shelloffsets[n-1] + 1;
265 lastoffset++;
266 nprim_icd += Q.nprim12[cd + (++icd)];
267 }
268 else
269 shelloffsets[n] = shelloffsets[n-1];
270 iprimcd++;
271 }
272 }
273 else
274 iprimcd += SIMINT_SIMD_LEN;
275
276 // Do we have to compute this vector (or has it been screened out)?
277 // (not_screened != 0 means we have to do this vector)
278 if(check_screen)
279 {
280 const double vmax = vector_max(SIMINT_MUL(bra_screen_max, SIMINT_DBLLOAD(Q.screen, j)));
281 if(vmax < screen_tol)
282 {
283 PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
284 PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
285 PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
286 PRIM_PTR_INT__n_s_k_s += lastoffset*2376;
287 PRIM_PTR_INT__o_s_k_s += lastoffset*2808;
288 PRIM_PTR_INT__q_s_k_s += lastoffset*3276;
289 PRIM_PTR_INT__r_s_k_s += lastoffset*3780;
290 PRIM_PTR_INT__t_s_k_s += lastoffset*4320;
291 continue;
292 }
293 }
294
295 const SIMINT_DBLTYPE Q_alpha = SIMINT_DBLLOAD(Q.alpha, j);
296 const SIMINT_DBLTYPE PQalpha_mul = SIMINT_MUL(P_alpha, Q_alpha);
297 const SIMINT_DBLTYPE PQalpha_sum = SIMINT_ADD(P_alpha, Q_alpha);
298 const SIMINT_DBLTYPE one_over_PQalpha_sum = SIMINT_DIV(const_1, PQalpha_sum);
299
300
301 /* construct R2 = (Px - Qx)**2 + (Py - Qy)**2 + (Pz -Qz)**2 */
302 SIMINT_DBLTYPE PQ[3];
303 PQ[0] = SIMINT_SUB(Pxyz[0], SIMINT_DBLLOAD(Q.x, j));
304 PQ[1] = SIMINT_SUB(Pxyz[1], SIMINT_DBLLOAD(Q.y, j));
305 PQ[2] = SIMINT_SUB(Pxyz[2], SIMINT_DBLLOAD(Q.z, j));
306 SIMINT_DBLTYPE R2 = SIMINT_MUL(PQ[0], PQ[0]);
307 R2 = SIMINT_FMADD(PQ[1], PQ[1], R2);
308 R2 = SIMINT_FMADD(PQ[2], PQ[2], R2);
309
310 const SIMINT_DBLTYPE alpha = SIMINT_MUL(PQalpha_mul, one_over_PQalpha_sum); // alpha from MEST
311 const SIMINT_DBLTYPE one_over_p = SIMINT_DIV(const_1, P_alpha);
312 const SIMINT_DBLTYPE one_over_q = SIMINT_DIV(const_1, Q_alpha);
313 const SIMINT_DBLTYPE one_over_2p = SIMINT_MUL(one_half, one_over_p);
314 const SIMINT_DBLTYPE one_over_2q = SIMINT_MUL(one_half, one_over_q);
315 const SIMINT_DBLTYPE one_over_2pq = SIMINT_MUL(one_half, one_over_PQalpha_sum);
316 const SIMINT_DBLTYPE Q_PA[3] = { SIMINT_DBLLOAD(Q.PA_x, j), SIMINT_DBLLOAD(Q.PA_y, j), SIMINT_DBLLOAD(Q.PA_z, j) };
317
318 // NOTE: Minus sign!
319 const SIMINT_DBLTYPE a_over_p = SIMINT_MUL(SIMINT_NEG(alpha), one_over_p);
320 SIMINT_DBLTYPE aop_PQ[3];
321 aop_PQ[0] = SIMINT_MUL(a_over_p, PQ[0]);
322 aop_PQ[1] = SIMINT_MUL(a_over_p, PQ[1]);
323 aop_PQ[2] = SIMINT_MUL(a_over_p, PQ[2]);
324
325 SIMINT_DBLTYPE a_over_q = SIMINT_MUL(alpha, one_over_q);
326 SIMINT_DBLTYPE aoq_PQ[3];
327 aoq_PQ[0] = SIMINT_MUL(a_over_q, PQ[0]);
328 aoq_PQ[1] = SIMINT_MUL(a_over_q, PQ[1]);
329 aoq_PQ[2] = SIMINT_MUL(a_over_q, PQ[2]);
330 // Put a minus sign here so we don't have to in RR routines
331 a_over_q = SIMINT_NEG(a_over_q);
332
333
334 //////////////////////////////////////////////
335 // Fjt function section
336 // Maximum v value: 21
337 //////////////////////////////////////////////
338 // The parameter to the Fjt function
339 const SIMINT_DBLTYPE F_x = SIMINT_MUL(R2, alpha);
340
341
342 const SIMINT_DBLTYPE Q_prefac = mask_load(nlane, Q.prefac + j);
343
344
345 boys_F_split(PRIM_INT__s_s_s_s, F_x, 21);
346 SIMINT_DBLTYPE prefac = SIMINT_SQRT(one_over_PQalpha_sum);
347 prefac = SIMINT_MUL(SIMINT_MUL(P_prefac, Q_prefac), prefac);
348 for(n = 0; n <= 21; n++)
349 PRIM_INT__s_s_s_s[n] = SIMINT_MUL(PRIM_INT__s_s_s_s[n], prefac);
350
351 //////////////////////////////////////////////
352 // Primitive integrals: Vertical recurrance
353 //////////////////////////////////////////////
354
355 const SIMINT_DBLTYPE vrr_const_1_over_2p = one_over_2p;
356 const SIMINT_DBLTYPE vrr_const_2_over_2p = SIMINT_MUL(const_2, one_over_2p);
357 const SIMINT_DBLTYPE vrr_const_3_over_2p = SIMINT_MUL(const_3, one_over_2p);
358 const SIMINT_DBLTYPE vrr_const_4_over_2p = SIMINT_MUL(const_4, one_over_2p);
359 const SIMINT_DBLTYPE vrr_const_5_over_2p = SIMINT_MUL(const_5, one_over_2p);
360 const SIMINT_DBLTYPE vrr_const_6_over_2p = SIMINT_MUL(const_6, one_over_2p);
361 const SIMINT_DBLTYPE vrr_const_7_over_2p = SIMINT_MUL(const_7, one_over_2p);
362 const SIMINT_DBLTYPE vrr_const_8_over_2p = SIMINT_MUL(const_8, one_over_2p);
363 const SIMINT_DBLTYPE vrr_const_9_over_2p = SIMINT_MUL(const_9, one_over_2p);
364 const SIMINT_DBLTYPE vrr_const_10_over_2p = SIMINT_MUL(const_10, one_over_2p);
365 const SIMINT_DBLTYPE vrr_const_11_over_2p = SIMINT_MUL(const_11, one_over_2p);
366 const SIMINT_DBLTYPE vrr_const_12_over_2p = SIMINT_MUL(const_12, one_over_2p);
367 const SIMINT_DBLTYPE vrr_const_13_over_2p = SIMINT_MUL(const_13, one_over_2p);
368 const SIMINT_DBLTYPE vrr_const_1_over_2q = one_over_2q;
369 const SIMINT_DBLTYPE vrr_const_2_over_2q = SIMINT_MUL(const_2, one_over_2q);
370 const SIMINT_DBLTYPE vrr_const_3_over_2q = SIMINT_MUL(const_3, one_over_2q);
371 const SIMINT_DBLTYPE vrr_const_4_over_2q = SIMINT_MUL(const_4, one_over_2q);
372 const SIMINT_DBLTYPE vrr_const_5_over_2q = SIMINT_MUL(const_5, one_over_2q);
373 const SIMINT_DBLTYPE vrr_const_6_over_2q = SIMINT_MUL(const_6, one_over_2q);
374 const SIMINT_DBLTYPE vrr_const_1_over_2pq = one_over_2pq;
375 const SIMINT_DBLTYPE vrr_const_2_over_2pq = SIMINT_MUL(const_2, one_over_2pq);
376 const SIMINT_DBLTYPE vrr_const_3_over_2pq = SIMINT_MUL(const_3, one_over_2pq);
377 const SIMINT_DBLTYPE vrr_const_4_over_2pq = SIMINT_MUL(const_4, one_over_2pq);
378 const SIMINT_DBLTYPE vrr_const_5_over_2pq = SIMINT_MUL(const_5, one_over_2pq);
379 const SIMINT_DBLTYPE vrr_const_6_over_2pq = SIMINT_MUL(const_6, one_over_2pq);
380 const SIMINT_DBLTYPE vrr_const_7_over_2pq = SIMINT_MUL(const_7, one_over_2pq);
381 const SIMINT_DBLTYPE vrr_const_8_over_2pq = SIMINT_MUL(const_8, one_over_2pq);
382 const SIMINT_DBLTYPE vrr_const_9_over_2pq = SIMINT_MUL(const_9, one_over_2pq);
383 const SIMINT_DBLTYPE vrr_const_10_over_2pq = SIMINT_MUL(const_10, one_over_2pq);
384 const SIMINT_DBLTYPE vrr_const_11_over_2pq = SIMINT_MUL(const_11, one_over_2pq);
385 const SIMINT_DBLTYPE vrr_const_12_over_2pq = SIMINT_MUL(const_12, one_over_2pq);
386 const SIMINT_DBLTYPE vrr_const_13_over_2pq = SIMINT_MUL(const_13, one_over_2pq);
387 const SIMINT_DBLTYPE vrr_const_14_over_2pq = SIMINT_MUL(const_14, one_over_2pq);
388
389
390
391 // Forming PRIM_INT__p_s_s_s[21 * 3];
392 for(n = 0; n < 21; ++n) // loop over orders of auxiliary function
393 {
394
395 PRIM_INT__p_s_s_s[n * 3 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
396 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]);
397
398 PRIM_INT__p_s_s_s[n * 3 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
399 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]);
400
401 PRIM_INT__p_s_s_s[n * 3 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
402 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]);
403
404 }
405
406
407
408 // Forming PRIM_INT__d_s_s_s[20 * 6];
409 for(n = 0; n < 20; ++n) // loop over orders of auxiliary function
410 {
411
412 PRIM_INT__d_s_s_s[n * 6 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
413 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]);
414 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]);
415
416 PRIM_INT__d_s_s_s[n * 6 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
417 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]);
418
419 PRIM_INT__d_s_s_s[n * 6 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
420 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]);
421
422 PRIM_INT__d_s_s_s[n * 6 + 3] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
423 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]);
424 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]);
425
426 PRIM_INT__d_s_s_s[n * 6 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
427 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]);
428
429 PRIM_INT__d_s_s_s[n * 6 + 5] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
430 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]);
431 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]);
432
433 }
434
435
436
437 // Forming PRIM_INT__f_s_s_s[19 * 10];
438 for(n = 0; n < 19; ++n) // loop over orders of auxiliary function
439 {
440
441 PRIM_INT__f_s_s_s[n * 10 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
442 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]);
443 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]);
444
445 PRIM_INT__f_s_s_s[n * 10 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
446 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]);
447
448 PRIM_INT__f_s_s_s[n * 10 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
449 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]);
450
451 PRIM_INT__f_s_s_s[n * 10 + 3] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
452 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]);
453
454 PRIM_INT__f_s_s_s[n * 10 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
455 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]);
456
457 PRIM_INT__f_s_s_s[n * 10 + 5] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
458 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]);
459
460 PRIM_INT__f_s_s_s[n * 10 + 6] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
461 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]);
462 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]);
463
464 PRIM_INT__f_s_s_s[n * 10 + 7] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
465 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]);
466
467 PRIM_INT__f_s_s_s[n * 10 + 8] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
468 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]);
469
470 PRIM_INT__f_s_s_s[n * 10 + 9] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
471 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]);
472 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]);
473
474 }
475
476
477 VRR_I_g_s_s_s(
478 PRIM_INT__g_s_s_s,
479 PRIM_INT__f_s_s_s,
480 PRIM_INT__d_s_s_s,
481 P_PA,
482 a_over_p,
483 aop_PQ,
484 one_over_2p,
485 18);
486
487
488 VRR_I_h_s_s_s(
489 PRIM_INT__h_s_s_s,
490 PRIM_INT__g_s_s_s,
491 PRIM_INT__f_s_s_s,
492 P_PA,
493 a_over_p,
494 aop_PQ,
495 one_over_2p,
496 17);
497
498
499 ostei_general_vrr1_I(6, 16,
500 one_over_2p, a_over_p, aop_PQ, P_PA,
501 PRIM_INT__h_s_s_s, PRIM_INT__g_s_s_s, PRIM_INT__i_s_s_s);
502
503
504 ostei_general_vrr1_I(7, 15,
505 one_over_2p, a_over_p, aop_PQ, P_PA,
506 PRIM_INT__i_s_s_s, PRIM_INT__h_s_s_s, PRIM_INT__k_s_s_s);
507
508
509 ostei_general_vrr_K(7, 0, 1, 0, 7,
510 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
511 PRIM_INT__k_s_s_s, NULL, NULL, PRIM_INT__i_s_s_s, NULL, PRIM_INT__k_s_p_s);
512
513
514 ostei_general_vrr_K(6, 0, 1, 0, 7,
515 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
516 PRIM_INT__i_s_s_s, NULL, NULL, PRIM_INT__h_s_s_s, NULL, PRIM_INT__i_s_p_s);
517
518
519 ostei_general_vrr_K(7, 0, 2, 0, 6,
520 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
521 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);
522
523
524 ostei_general_vrr_K(5, 0, 1, 0, 7,
525 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
526 PRIM_INT__h_s_s_s, NULL, NULL, PRIM_INT__g_s_s_s, NULL, PRIM_INT__h_s_p_s);
527
528
529 ostei_general_vrr_K(6, 0, 2, 0, 6,
530 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
531 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);
532
533
534 ostei_general_vrr_K(7, 0, 3, 0, 5,
535 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
536 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);
537
538
539 VRR_K_g_s_p_s(
540 PRIM_INT__g_s_p_s,
541 PRIM_INT__g_s_s_s,
542 PRIM_INT__f_s_s_s,
543 Q_PA,
544 aoq_PQ,
545 one_over_2pq,
546 7);
547
548
549 ostei_general_vrr_K(5, 0, 2, 0, 6,
550 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
551 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);
552
553
554 ostei_general_vrr_K(6, 0, 3, 0, 5,
555 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
556 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);
557
558
559 ostei_general_vrr_K(7, 0, 4, 0, 4,
560 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
561 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);
562
563
564 VRR_K_f_s_p_s(
565 PRIM_INT__f_s_p_s,
566 PRIM_INT__f_s_s_s,
567 PRIM_INT__d_s_s_s,
568 Q_PA,
569 aoq_PQ,
570 one_over_2pq,
571 7);
572
573
574 ostei_general_vrr_K(4, 0, 2, 0, 6,
575 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
576 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);
577
578
579 ostei_general_vrr_K(5, 0, 3, 0, 5,
580 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
581 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);
582
583
584 ostei_general_vrr_K(6, 0, 4, 0, 4,
585 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
586 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);
587
588
589 ostei_general_vrr_K(7, 0, 5, 0, 3,
590 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
591 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);
592
593
594
595 // Forming PRIM_INT__d_s_p_s[7 * 18];
596 for(n = 0; n < 7; ++n) // loop over orders of auxiliary function
597 {
598
599 PRIM_INT__d_s_p_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
600 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]);
601 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]);
602
603 PRIM_INT__d_s_p_s[n * 18 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
604 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]);
605
606 PRIM_INT__d_s_p_s[n * 18 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
607 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]);
608
609 PRIM_INT__d_s_p_s[n * 18 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 1]);
610 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]);
611 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]);
612
613 PRIM_INT__d_s_p_s[n * 18 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 1]);
614 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]);
615 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]);
616
617 PRIM_INT__d_s_p_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
618 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]);
619
620 PRIM_INT__d_s_p_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 2]);
621 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]);
622 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]);
623
624 PRIM_INT__d_s_p_s[n * 18 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 2]);
625 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]);
626
627 PRIM_INT__d_s_p_s[n * 18 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 2]);
628 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]);
629 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]);
630
631 PRIM_INT__d_s_p_s[n * 18 + 9] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
632 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]);
633
634 PRIM_INT__d_s_p_s[n * 18 + 10] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
635 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]);
636 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]);
637
638 PRIM_INT__d_s_p_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
639 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]);
640
641 PRIM_INT__d_s_p_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 4]);
642 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]);
643
644 PRIM_INT__d_s_p_s[n * 18 + 13] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 4]);
645 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]);
646 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]);
647
648 PRIM_INT__d_s_p_s[n * 18 + 14] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 4]);
649 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]);
650 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]);
651
652 PRIM_INT__d_s_p_s[n * 18 + 15] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
653 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]);
654
655 PRIM_INT__d_s_p_s[n * 18 + 16] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
656 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]);
657
658 PRIM_INT__d_s_p_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
659 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]);
660 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]);
661
662 }
663
664
665 VRR_K_f_s_d_s(
666 PRIM_INT__f_s_d_s,
667 PRIM_INT__f_s_p_s,
668 PRIM_INT__f_s_s_s,
669 PRIM_INT__d_s_p_s,
670 Q_PA,
671 a_over_q,
672 aoq_PQ,
673 one_over_2pq,
674 one_over_2q,
675 6);
676
677
678 ostei_general_vrr_K(4, 0, 3, 0, 5,
679 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
680 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);
681
682
683 ostei_general_vrr_K(5, 0, 4, 0, 4,
684 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
685 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);
686
687
688 ostei_general_vrr_K(6, 0, 5, 0, 3,
689 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
690 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);
691
692
693 ostei_general_vrr_K(7, 0, 6, 0, 2,
694 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
695 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);
696
697
698
699 // Forming PRIM_INT__p_s_p_s[7 * 9];
700 for(n = 0; n < 7; ++n) // loop over orders of auxiliary function
701 {
702
703 PRIM_INT__p_s_p_s[n * 9 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
704 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]);
705 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]);
706
707 PRIM_INT__p_s_p_s[n * 9 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
708 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]);
709
710 PRIM_INT__p_s_p_s[n * 9 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
711 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]);
712
713 PRIM_INT__p_s_p_s[n * 9 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 1]);
714 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]);
715
716 PRIM_INT__p_s_p_s[n * 9 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
717 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]);
718 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]);
719
720 PRIM_INT__p_s_p_s[n * 9 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
721 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]);
722
723 PRIM_INT__p_s_p_s[n * 9 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 2]);
724 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]);
725
726 PRIM_INT__p_s_p_s[n * 9 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 2]);
727 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]);
728
729 PRIM_INT__p_s_p_s[n * 9 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
730 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]);
731 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]);
732
733 }
734
735
736 VRR_K_d_s_d_s(
737 PRIM_INT__d_s_d_s,
738 PRIM_INT__d_s_p_s,
739 PRIM_INT__d_s_s_s,
740 PRIM_INT__p_s_p_s,
741 Q_PA,
742 a_over_q,
743 aoq_PQ,
744 one_over_2pq,
745 one_over_2q,
746 6);
747
748
749 ostei_general_vrr_K(3, 0, 3, 0, 5,
750 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
751 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);
752
753
754 ostei_general_vrr_K(4, 0, 4, 0, 4,
755 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
756 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);
757
758
759 ostei_general_vrr_K(5, 0, 5, 0, 3,
760 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
761 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);
762
763
764 ostei_general_vrr_K(6, 0, 6, 0, 2,
765 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
766 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);
767
768
769 ostei_general_vrr_K(7, 0, 7, 0, 1,
770 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
771 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);
772
773
774 ostei_general_vrr1_I(8, 14,
775 one_over_2p, a_over_p, aop_PQ, P_PA,
776 PRIM_INT__k_s_s_s, PRIM_INT__i_s_s_s, PRIM_INT__l_s_s_s);
777
778
779 ostei_general_vrr_K(8, 0, 1, 0, 7,
780 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
781 PRIM_INT__l_s_s_s, NULL, NULL, PRIM_INT__k_s_s_s, NULL, PRIM_INT__l_s_p_s);
782
783
784 ostei_general_vrr_K(8, 0, 2, 0, 6,
785 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
786 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);
787
788
789 ostei_general_vrr_K(8, 0, 3, 0, 5,
790 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
791 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);
792
793
794 ostei_general_vrr_K(8, 0, 4, 0, 4,
795 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
796 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);
797
798
799 ostei_general_vrr_K(8, 0, 5, 0, 3,
800 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
801 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);
802
803
804 ostei_general_vrr_K(8, 0, 6, 0, 2,
805 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
806 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);
807
808
809 ostei_general_vrr_K(8, 0, 7, 0, 1,
810 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
811 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);
812
813
814 ostei_general_vrr1_I(9, 13,
815 one_over_2p, a_over_p, aop_PQ, P_PA,
816 PRIM_INT__l_s_s_s, PRIM_INT__k_s_s_s, PRIM_INT__m_s_s_s);
817
818
819 ostei_general_vrr_K(9, 0, 1, 0, 7,
820 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
821 PRIM_INT__m_s_s_s, NULL, NULL, PRIM_INT__l_s_s_s, NULL, PRIM_INT__m_s_p_s);
822
823
824 ostei_general_vrr_K(9, 0, 2, 0, 6,
825 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
826 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);
827
828
829 ostei_general_vrr_K(9, 0, 3, 0, 5,
830 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
831 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);
832
833
834 ostei_general_vrr_K(9, 0, 4, 0, 4,
835 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
836 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);
837
838
839 ostei_general_vrr_K(9, 0, 5, 0, 3,
840 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
841 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);
842
843
844 ostei_general_vrr_K(9, 0, 6, 0, 2,
845 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
846 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);
847
848
849 ostei_general_vrr_K(9, 0, 7, 0, 1,
850 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
851 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);
852
853
854 ostei_general_vrr1_I(10, 12,
855 one_over_2p, a_over_p, aop_PQ, P_PA,
856 PRIM_INT__m_s_s_s, PRIM_INT__l_s_s_s, PRIM_INT__n_s_s_s);
857
858
859 ostei_general_vrr_K(10, 0, 1, 0, 7,
860 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
861 PRIM_INT__n_s_s_s, NULL, NULL, PRIM_INT__m_s_s_s, NULL, PRIM_INT__n_s_p_s);
862
863
864 ostei_general_vrr_K(10, 0, 2, 0, 6,
865 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
866 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);
867
868
869 ostei_general_vrr_K(10, 0, 3, 0, 5,
870 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
871 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);
872
873
874 ostei_general_vrr_K(10, 0, 4, 0, 4,
875 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
876 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);
877
878
879 ostei_general_vrr_K(10, 0, 5, 0, 3,
880 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
881 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);
882
883
884 ostei_general_vrr_K(10, 0, 6, 0, 2,
885 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
886 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);
887
888
889 ostei_general_vrr_K(10, 0, 7, 0, 1,
890 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
891 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);
892
893
894 ostei_general_vrr1_I(11, 11,
895 one_over_2p, a_over_p, aop_PQ, P_PA,
896 PRIM_INT__n_s_s_s, PRIM_INT__m_s_s_s, PRIM_INT__o_s_s_s);
897
898
899 ostei_general_vrr_K(11, 0, 1, 0, 7,
900 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
901 PRIM_INT__o_s_s_s, NULL, NULL, PRIM_INT__n_s_s_s, NULL, PRIM_INT__o_s_p_s);
902
903
904 ostei_general_vrr_K(11, 0, 2, 0, 6,
905 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
906 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);
907
908
909 ostei_general_vrr_K(11, 0, 3, 0, 5,
910 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
911 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);
912
913
914 ostei_general_vrr_K(11, 0, 4, 0, 4,
915 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
916 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);
917
918
919 ostei_general_vrr_K(11, 0, 5, 0, 3,
920 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
921 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);
922
923
924 ostei_general_vrr_K(11, 0, 6, 0, 2,
925 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
926 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);
927
928
929 ostei_general_vrr_K(11, 0, 7, 0, 1,
930 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
931 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);
932
933
934 ostei_general_vrr1_I(12, 10,
935 one_over_2p, a_over_p, aop_PQ, P_PA,
936 PRIM_INT__o_s_s_s, PRIM_INT__n_s_s_s, PRIM_INT__q_s_s_s);
937
938
939 ostei_general_vrr_K(12, 0, 1, 0, 7,
940 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
941 PRIM_INT__q_s_s_s, NULL, NULL, PRIM_INT__o_s_s_s, NULL, PRIM_INT__q_s_p_s);
942
943
944 ostei_general_vrr_K(12, 0, 2, 0, 6,
945 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
946 PRIM_INT__q_s_p_s, PRIM_INT__q_s_s_s, NULL, PRIM_INT__o_s_p_s, NULL, PRIM_INT__q_s_d_s);
947
948
949 ostei_general_vrr_K(12, 0, 3, 0, 5,
950 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
951 PRIM_INT__q_s_d_s, PRIM_INT__q_s_p_s, NULL, PRIM_INT__o_s_d_s, NULL, PRIM_INT__q_s_f_s);
952
953
954 ostei_general_vrr_K(12, 0, 4, 0, 4,
955 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
956 PRIM_INT__q_s_f_s, PRIM_INT__q_s_d_s, NULL, PRIM_INT__o_s_f_s, NULL, PRIM_INT__q_s_g_s);
957
958
959 ostei_general_vrr_K(12, 0, 5, 0, 3,
960 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
961 PRIM_INT__q_s_g_s, PRIM_INT__q_s_f_s, NULL, PRIM_INT__o_s_g_s, NULL, PRIM_INT__q_s_h_s);
962
963
964 ostei_general_vrr_K(12, 0, 6, 0, 2,
965 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
966 PRIM_INT__q_s_h_s, PRIM_INT__q_s_g_s, NULL, PRIM_INT__o_s_h_s, NULL, PRIM_INT__q_s_i_s);
967
968
969 ostei_general_vrr_K(12, 0, 7, 0, 1,
970 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
971 PRIM_INT__q_s_i_s, PRIM_INT__q_s_h_s, NULL, PRIM_INT__o_s_i_s, NULL, PRIM_INT__q_s_k_s);
972
973
974 ostei_general_vrr1_I(13, 9,
975 one_over_2p, a_over_p, aop_PQ, P_PA,
976 PRIM_INT__q_s_s_s, PRIM_INT__o_s_s_s, PRIM_INT__r_s_s_s);
977
978
979 ostei_general_vrr_K(13, 0, 1, 0, 7,
980 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
981 PRIM_INT__r_s_s_s, NULL, NULL, PRIM_INT__q_s_s_s, NULL, PRIM_INT__r_s_p_s);
982
983
984 ostei_general_vrr_K(13, 0, 2, 0, 6,
985 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
986 PRIM_INT__r_s_p_s, PRIM_INT__r_s_s_s, NULL, PRIM_INT__q_s_p_s, NULL, PRIM_INT__r_s_d_s);
987
988
989 ostei_general_vrr_K(13, 0, 3, 0, 5,
990 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
991 PRIM_INT__r_s_d_s, PRIM_INT__r_s_p_s, NULL, PRIM_INT__q_s_d_s, NULL, PRIM_INT__r_s_f_s);
992
993
994 ostei_general_vrr_K(13, 0, 4, 0, 4,
995 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
996 PRIM_INT__r_s_f_s, PRIM_INT__r_s_d_s, NULL, PRIM_INT__q_s_f_s, NULL, PRIM_INT__r_s_g_s);
997
998
999 ostei_general_vrr_K(13, 0, 5, 0, 3,
1000 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1001 PRIM_INT__r_s_g_s, PRIM_INT__r_s_f_s, NULL, PRIM_INT__q_s_g_s, NULL, PRIM_INT__r_s_h_s);
1002
1003
1004 ostei_general_vrr_K(13, 0, 6, 0, 2,
1005 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1006 PRIM_INT__r_s_h_s, PRIM_INT__r_s_g_s, NULL, PRIM_INT__q_s_h_s, NULL, PRIM_INT__r_s_i_s);
1007
1008
1009 ostei_general_vrr_K(13, 0, 7, 0, 1,
1010 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1011 PRIM_INT__r_s_i_s, PRIM_INT__r_s_h_s, NULL, PRIM_INT__q_s_i_s, NULL, PRIM_INT__r_s_k_s);
1012
1013
1014 ostei_general_vrr1_I(14, 8,
1015 one_over_2p, a_over_p, aop_PQ, P_PA,
1016 PRIM_INT__r_s_s_s, PRIM_INT__q_s_s_s, PRIM_INT__t_s_s_s);
1017
1018
1019 ostei_general_vrr_K(14, 0, 1, 0, 7,
1020 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1021 PRIM_INT__t_s_s_s, NULL, NULL, PRIM_INT__r_s_s_s, NULL, PRIM_INT__t_s_p_s);
1022
1023
1024 ostei_general_vrr_K(14, 0, 2, 0, 6,
1025 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1026 PRIM_INT__t_s_p_s, PRIM_INT__t_s_s_s, NULL, PRIM_INT__r_s_p_s, NULL, PRIM_INT__t_s_d_s);
1027
1028
1029 ostei_general_vrr_K(14, 0, 3, 0, 5,
1030 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1031 PRIM_INT__t_s_d_s, PRIM_INT__t_s_p_s, NULL, PRIM_INT__r_s_d_s, NULL, PRIM_INT__t_s_f_s);
1032
1033
1034 ostei_general_vrr_K(14, 0, 4, 0, 4,
1035 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1036 PRIM_INT__t_s_f_s, PRIM_INT__t_s_d_s, NULL, PRIM_INT__r_s_f_s, NULL, PRIM_INT__t_s_g_s);
1037
1038
1039 ostei_general_vrr_K(14, 0, 5, 0, 3,
1040 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1041 PRIM_INT__t_s_g_s, PRIM_INT__t_s_f_s, NULL, PRIM_INT__r_s_g_s, NULL, PRIM_INT__t_s_h_s);
1042
1043
1044 ostei_general_vrr_K(14, 0, 6, 0, 2,
1045 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1046 PRIM_INT__t_s_h_s, PRIM_INT__t_s_g_s, NULL, PRIM_INT__r_s_h_s, NULL, PRIM_INT__t_s_i_s);
1047
1048
1049 ostei_general_vrr_K(14, 0, 7, 0, 1,
1050 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1051 PRIM_INT__t_s_i_s, PRIM_INT__t_s_h_s, NULL, PRIM_INT__r_s_i_s, NULL, PRIM_INT__t_s_k_s);
1052
1053
1054
1055
1056 ////////////////////////////////////
1057 // Accumulate contracted integrals
1058 ////////////////////////////////////
1059 if(lastoffset == 0)
1060 {
1061 contract_all(1296, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
1062 contract_all(1620, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
1063 contract_all(1980, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
1064 contract_all(2376, PRIM_INT__n_s_k_s, PRIM_PTR_INT__n_s_k_s);
1065 contract_all(2808, PRIM_INT__o_s_k_s, PRIM_PTR_INT__o_s_k_s);
1066 contract_all(3276, PRIM_INT__q_s_k_s, PRIM_PTR_INT__q_s_k_s);
1067 contract_all(3780, PRIM_INT__r_s_k_s, PRIM_PTR_INT__r_s_k_s);
1068 contract_all(4320, PRIM_INT__t_s_k_s, PRIM_PTR_INT__t_s_k_s);
1069 }
1070 else
1071 {
1072 contract(1296, shelloffsets, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
1073 contract(1620, shelloffsets, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
1074 contract(1980, shelloffsets, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
1075 contract(2376, shelloffsets, PRIM_INT__n_s_k_s, PRIM_PTR_INT__n_s_k_s);
1076 contract(2808, shelloffsets, PRIM_INT__o_s_k_s, PRIM_PTR_INT__o_s_k_s);
1077 contract(3276, shelloffsets, PRIM_INT__q_s_k_s, PRIM_PTR_INT__q_s_k_s);
1078 contract(3780, shelloffsets, PRIM_INT__r_s_k_s, PRIM_PTR_INT__r_s_k_s);
1079 contract(4320, shelloffsets, PRIM_INT__t_s_k_s, PRIM_PTR_INT__t_s_k_s);
1080 PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
1081 PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
1082 PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
1083 PRIM_PTR_INT__n_s_k_s += lastoffset*2376;
1084 PRIM_PTR_INT__o_s_k_s += lastoffset*2808;
1085 PRIM_PTR_INT__q_s_k_s += lastoffset*3276;
1086 PRIM_PTR_INT__r_s_k_s += lastoffset*3780;
1087 PRIM_PTR_INT__t_s_k_s += lastoffset*4320;
1088 }
1089
1090 } // close loop over j
1091 } // close loop over i
1092
1093 //Advance to the next batch
1094 jstart = SIMINT_SIMD_ROUND(jend);
1095
1096 //////////////////////////////////////////////
1097 // Contracted integrals: Horizontal recurrance
1098 //////////////////////////////////////////////
1099
1100
1101 const double hAB[3] = { P.AB_x[ab], P.AB_y[ab], P.AB_z[ab] };
1102
1103
1104 for(abcd = 0; abcd < nshellbatch; ++abcd, ++real_abcd)
1105 {
1106
1107 // set up HRR pointers
1108 double const * restrict HRR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
1109 double const * restrict HRR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
1110 double const * restrict HRR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
1111 double const * restrict HRR_INT__n_s_k_s = INT__n_s_k_s + abcd * 2376;
1112 double const * restrict HRR_INT__o_s_k_s = INT__o_s_k_s + abcd * 2808;
1113 double const * restrict HRR_INT__q_s_k_s = INT__q_s_k_s + abcd * 3276;
1114 double const * restrict HRR_INT__r_s_k_s = INT__r_s_k_s + abcd * 3780;
1115 double const * restrict HRR_INT__t_s_k_s = INT__t_s_k_s + abcd * 4320;
1116 double * restrict HRR_INT__k_k_k_s = INT__k_k_k_s + real_abcd * 46656;
1117
1118 // form INT__k_p_k_s
1119 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);
1120
1121 // form INT__l_p_k_s
1122 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);
1123
1124 // form INT__m_p_k_s
1125 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);
1126
1127 // form INT__n_p_k_s
1128 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);
1129
1130 // form INT__o_p_k_s
1131 ostei_general_hrr_J(11, 1, 7, 0, hAB, HRR_INT__q_s_k_s, HRR_INT__o_s_k_s, HRR_INT__o_p_k_s);
1132
1133 // form INT__q_p_k_s
1134 ostei_general_hrr_J(12, 1, 7, 0, hAB, HRR_INT__r_s_k_s, HRR_INT__q_s_k_s, HRR_INT__q_p_k_s);
1135
1136 // form INT__r_p_k_s
1137 ostei_general_hrr_J(13, 1, 7, 0, hAB, HRR_INT__t_s_k_s, HRR_INT__r_s_k_s, HRR_INT__r_p_k_s);
1138
1139 // form INT__k_d_k_s
1140 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);
1141
1142 // form INT__l_d_k_s
1143 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);
1144
1145 // form INT__m_d_k_s
1146 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);
1147
1148 // form INT__n_d_k_s
1149 ostei_general_hrr_J(10, 2, 7, 0, hAB, HRR_INT__o_p_k_s, HRR_INT__n_p_k_s, HRR_INT__n_d_k_s);
1150
1151 // form INT__o_d_k_s
1152 ostei_general_hrr_J(11, 2, 7, 0, hAB, HRR_INT__q_p_k_s, HRR_INT__o_p_k_s, HRR_INT__o_d_k_s);
1153
1154 // form INT__q_d_k_s
1155 ostei_general_hrr_J(12, 2, 7, 0, hAB, HRR_INT__r_p_k_s, HRR_INT__q_p_k_s, HRR_INT__q_d_k_s);
1156
1157 // form INT__k_f_k_s
1158 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);
1159
1160 // form INT__l_f_k_s
1161 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);
1162
1163 // form INT__m_f_k_s
1164 ostei_general_hrr_J(9, 3, 7, 0, hAB, HRR_INT__n_d_k_s, HRR_INT__m_d_k_s, HRR_INT__m_f_k_s);
1165
1166 // form INT__n_f_k_s
1167 ostei_general_hrr_J(10, 3, 7, 0, hAB, HRR_INT__o_d_k_s, HRR_INT__n_d_k_s, HRR_INT__n_f_k_s);
1168
1169 // form INT__o_f_k_s
1170 ostei_general_hrr_J(11, 3, 7, 0, hAB, HRR_INT__q_d_k_s, HRR_INT__o_d_k_s, HRR_INT__o_f_k_s);
1171
1172 // form INT__k_g_k_s
1173 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);
1174
1175 // form INT__l_g_k_s
1176 ostei_general_hrr_J(8, 4, 7, 0, hAB, HRR_INT__m_f_k_s, HRR_INT__l_f_k_s, HRR_INT__l_g_k_s);
1177
1178 // form INT__m_g_k_s
1179 ostei_general_hrr_J(9, 4, 7, 0, hAB, HRR_INT__n_f_k_s, HRR_INT__m_f_k_s, HRR_INT__m_g_k_s);
1180
1181 // form INT__n_g_k_s
1182 ostei_general_hrr_J(10, 4, 7, 0, hAB, HRR_INT__o_f_k_s, HRR_INT__n_f_k_s, HRR_INT__n_g_k_s);
1183
1184 // form INT__k_h_k_s
1185 ostei_general_hrr_J(7, 5, 7, 0, hAB, HRR_INT__l_g_k_s, HRR_INT__k_g_k_s, HRR_INT__k_h_k_s);
1186
1187 // form INT__l_h_k_s
1188 ostei_general_hrr_J(8, 5, 7, 0, hAB, HRR_INT__m_g_k_s, HRR_INT__l_g_k_s, HRR_INT__l_h_k_s);
1189
1190 // form INT__m_h_k_s
1191 ostei_general_hrr_J(9, 5, 7, 0, hAB, HRR_INT__n_g_k_s, HRR_INT__m_g_k_s, HRR_INT__m_h_k_s);
1192
1193 // form INT__k_i_k_s
1194 ostei_general_hrr_J(7, 6, 7, 0, hAB, HRR_INT__l_h_k_s, HRR_INT__k_h_k_s, HRR_INT__k_i_k_s);
1195
1196 // form INT__l_i_k_s
1197 ostei_general_hrr_J(8, 6, 7, 0, hAB, HRR_INT__m_h_k_s, HRR_INT__l_h_k_s, HRR_INT__l_i_k_s);
1198
1199 // form INT__k_k_k_s
1200 ostei_general_hrr_J(7, 7, 7, 0, hAB, HRR_INT__l_i_k_s, HRR_INT__k_i_k_s, HRR_INT__k_k_k_s);
1201
1202
1203 } // close HRR loop
1204
1205
1206 } // close loop cdbatch
1207
1208 istart = iend;
1209 } // close loop over ab
1210
1211 return P.nshell12_clip * Q.nshell12_clip;
1212 }
1213
ostei_k_k_s_k(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__k_k_s_k)1214 int ostei_k_k_s_k(struct simint_multi_shellpair const P,
1215 struct simint_multi_shellpair const Q,
1216 double screen_tol,
1217 double * const restrict work,
1218 double * const restrict INT__k_k_s_k)
1219 {
1220 double Q_AB[3*Q.nshell12];
1221 struct simint_multi_shellpair Q_tmp = Q;
1222 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1223 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1224 Q_tmp.AB_x = Q_AB;
1225 Q_tmp.AB_y = Q_AB + Q.nshell12;
1226 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1227
1228 for(int i = 0; i < Q.nshell12; i++)
1229 {
1230 Q_tmp.AB_x[i] = -Q.AB_x[i];
1231 Q_tmp.AB_y[i] = -Q.AB_y[i];
1232 Q_tmp.AB_z[i] = -Q.AB_z[i];
1233 }
1234
1235 int ret = ostei_k_k_k_s(P, Q_tmp, screen_tol, work, INT__k_k_s_k);
1236 double buffer[46656] SIMINT_ALIGN_ARRAY_DBL;
1237
1238 for(int q = 0; q < ret; q++)
1239 {
1240 int idx = 0;
1241 for(int a = 0; a < 36; ++a)
1242 for(int b = 0; b < 36; ++b)
1243 for(int c = 0; c < 1; ++c)
1244 for(int d = 0; d < 36; ++d)
1245 buffer[idx++] = INT__k_k_s_k[q*46656+a*1296+b*36+d*1+c];
1246
1247 memcpy(INT__k_k_s_k+q*46656, buffer, 46656*sizeof(double));
1248 }
1249
1250 return ret;
1251 }
1252
1253