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_i_f_i_p(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__i_f_i_p)8 int ostei_i_f_i_p(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__i_f_i_p)
13 {
14
15 SIMINT_ASSUME_ALIGN_DBL(work);
16 SIMINT_ASSUME_ALIGN_DBL(INT__i_f_i_p);
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__i_s_i_s = work + (SIMINT_NSHELL_SIMD * 0);
30 double * const INT__i_s_k_s = work + (SIMINT_NSHELL_SIMD * 784);
31 double * const INT__k_s_i_s = work + (SIMINT_NSHELL_SIMD * 1792);
32 double * const INT__k_s_k_s = work + (SIMINT_NSHELL_SIMD * 2800);
33 double * const INT__l_s_i_s = work + (SIMINT_NSHELL_SIMD * 4096);
34 double * const INT__l_s_k_s = work + (SIMINT_NSHELL_SIMD * 5356);
35 double * const INT__m_s_i_s = work + (SIMINT_NSHELL_SIMD * 6976);
36 double * const INT__m_s_k_s = work + (SIMINT_NSHELL_SIMD * 8516);
37 SIMINT_DBLTYPE * const primwork = (SIMINT_DBLTYPE *)(work + SIMINT_NSHELL_SIMD*10496);
38 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_s_s = primwork + 0;
39 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_p_s = primwork + 17;
40 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_s_s = primwork + 38;
41 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_p_s = primwork + 86;
42 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_d_s = primwork + 149;
43 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_s_s = primwork + 257;
44 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_p_s = primwork + 347;
45 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_d_s = primwork + 473;
46 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_f_s = primwork + 689;
47 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_s_s = primwork + 989;
48 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_p_s = primwork + 1129;
49 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_d_s = primwork + 1339;
50 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_f_s = primwork + 1699;
51 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_g_s = primwork + 2199;
52 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_s_s = primwork + 2799;
53 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_p_s = primwork + 2994;
54 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_d_s = primwork + 3309;
55 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_f_s = primwork + 3849;
56 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_g_s = primwork + 4599;
57 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_h_s = primwork + 5499;
58 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_s_s = primwork + 6444;
59 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_p_s = primwork + 6696;
60 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_d_s = primwork + 7137;
61 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_f_s = primwork + 7893;
62 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_g_s = primwork + 8943;
63 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_h_s = primwork + 10203;
64 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_i_s = primwork + 11526;
65 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_s_s = primwork + 12702;
66 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_p_s = primwork + 13010;
67 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_d_s = primwork + 13598;
68 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_f_s = primwork + 14606;
69 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_g_s = primwork + 16006;
70 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_h_s = primwork + 17686;
71 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_i_s = primwork + 19450;
72 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_k_s = primwork + 21018;
73 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_s_s = primwork + 22026;
74 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_p_s = primwork + 22386;
75 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_d_s = primwork + 23142;
76 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_f_s = primwork + 24438;
77 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_g_s = primwork + 26238;
78 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_h_s = primwork + 28398;
79 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_i_s = primwork + 30666;
80 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_k_s = primwork + 32682;
81 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_s_s = primwork + 33978;
82 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_p_s = primwork + 34383;
83 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_d_s = primwork + 35328;
84 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_f_s = primwork + 36948;
85 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_g_s = primwork + 39198;
86 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_h_s = primwork + 41898;
87 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_i_s = primwork + 44733;
88 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_k_s = primwork + 47253;
89 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_s_s = primwork + 48873;
90 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_p_s = primwork + 49313;
91 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_d_s = primwork + 50468;
92 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_f_s = primwork + 52448;
93 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_g_s = primwork + 55198;
94 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_h_s = primwork + 58498;
95 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_i_s = primwork + 61963;
96 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_k_s = primwork + 65043;
97 double * const hrrwork = (double *)(primwork + 67023);
98 double * const HRR_INT__i_p_i_s = hrrwork + 0;
99 double * const HRR_INT__i_p_k_s = hrrwork + 2352;
100 double * const HRR_INT__i_d_i_s = hrrwork + 5376;
101 double * const HRR_INT__i_d_k_s = hrrwork + 10080;
102 double * const HRR_INT__i_f_i_s = hrrwork + 16128;
103 double * const HRR_INT__i_f_k_s = hrrwork + 23968;
104 double * const HRR_INT__k_p_i_s = hrrwork + 34048;
105 double * const HRR_INT__k_p_k_s = hrrwork + 37072;
106 double * const HRR_INT__k_d_i_s = hrrwork + 40960;
107 double * const HRR_INT__k_d_k_s = hrrwork + 47008;
108 double * const HRR_INT__l_p_i_s = hrrwork + 54784;
109 double * const HRR_INT__l_p_k_s = hrrwork + 58564;
110
111
112 // Create constants
113 const SIMINT_DBLTYPE const_1 = SIMINT_DBLSET1(1);
114 const SIMINT_DBLTYPE const_2 = SIMINT_DBLSET1(2);
115 const SIMINT_DBLTYPE const_3 = SIMINT_DBLSET1(3);
116 const SIMINT_DBLTYPE const_4 = SIMINT_DBLSET1(4);
117 const SIMINT_DBLTYPE const_5 = SIMINT_DBLSET1(5);
118 const SIMINT_DBLTYPE const_6 = SIMINT_DBLSET1(6);
119 const SIMINT_DBLTYPE const_7 = SIMINT_DBLSET1(7);
120 const SIMINT_DBLTYPE const_8 = SIMINT_DBLSET1(8);
121 const SIMINT_DBLTYPE const_9 = SIMINT_DBLSET1(9);
122 const SIMINT_DBLTYPE one_half = SIMINT_DBLSET1(0.5);
123
124
125 ////////////////////////////////////////
126 // Loop over shells and primitives
127 ////////////////////////////////////////
128
129 real_abcd = 0;
130 istart = 0;
131 for(ab = 0; ab < P.nshell12_clip; ++ab)
132 {
133 const int iend = istart + P.nprim12[ab];
134
135 cd = 0;
136 jstart = 0;
137
138 for(cd = 0; cd < Q.nshell12_clip; cd += SIMINT_NSHELL_SIMD)
139 {
140 const int nshellbatch = ((cd + SIMINT_NSHELL_SIMD) > Q.nshell12_clip) ? Q.nshell12_clip - cd : SIMINT_NSHELL_SIMD;
141 int jend = jstart;
142 for(i = 0; i < nshellbatch; i++)
143 jend += Q.nprim12[cd+i];
144
145 // Clear the beginning of the workspace (where we are accumulating integrals)
146 memset(work, 0, SIMINT_NSHELL_SIMD * 10496 * sizeof(double));
147 abcd = 0;
148
149
150 for(i = istart; i < iend; ++i)
151 {
152 SIMINT_DBLTYPE bra_screen_max; // only used if check_screen
153
154 if(check_screen)
155 {
156 // Skip this whole thing if always insignificant
157 if((P.screen[i] * Q.screen_max) < screen_tol)
158 continue;
159 bra_screen_max = SIMINT_DBLSET1(P.screen[i]);
160 }
161
162 icd = 0;
163 iprimcd = 0;
164 nprim_icd = Q.nprim12[cd];
165 double * restrict PRIM_PTR_INT__i_s_i_s = INT__i_s_i_s + abcd * 784;
166 double * restrict PRIM_PTR_INT__i_s_k_s = INT__i_s_k_s + abcd * 1008;
167 double * restrict PRIM_PTR_INT__k_s_i_s = INT__k_s_i_s + abcd * 1008;
168 double * restrict PRIM_PTR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
169 double * restrict PRIM_PTR_INT__l_s_i_s = INT__l_s_i_s + abcd * 1260;
170 double * restrict PRIM_PTR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
171 double * restrict PRIM_PTR_INT__m_s_i_s = INT__m_s_i_s + abcd * 1540;
172 double * restrict PRIM_PTR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
173
174
175
176 // Load these one per loop over i
177 const SIMINT_DBLTYPE P_alpha = SIMINT_DBLSET1(P.alpha[i]);
178 const SIMINT_DBLTYPE P_prefac = SIMINT_DBLSET1(P.prefac[i]);
179 const SIMINT_DBLTYPE Pxyz[3] = { SIMINT_DBLSET1(P.x[i]), SIMINT_DBLSET1(P.y[i]), SIMINT_DBLSET1(P.z[i]) };
180
181 const SIMINT_DBLTYPE P_PA[3] = { SIMINT_DBLSET1(P.PA_x[i]), SIMINT_DBLSET1(P.PA_y[i]), SIMINT_DBLSET1(P.PA_z[i]) };
182
183 for(j = jstart; j < jend; j += SIMINT_SIMD_LEN)
184 {
185 // calculate the shell offsets
186 // these are the offset from the shell pointed to by cd
187 // for each element
188 int shelloffsets[SIMINT_SIMD_LEN] = {0};
189 int lastoffset = 0;
190 const int nlane = ( ((j + SIMINT_SIMD_LEN) < jend) ? SIMINT_SIMD_LEN : (jend - j));
191
192 if((iprimcd + SIMINT_SIMD_LEN) >= nprim_icd)
193 {
194 // Handle if the first element of the vector is a new shell
195 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
196 {
197 nprim_icd += Q.nprim12[cd + (++icd)];
198 PRIM_PTR_INT__i_s_i_s += 784;
199 PRIM_PTR_INT__i_s_k_s += 1008;
200 PRIM_PTR_INT__k_s_i_s += 1008;
201 PRIM_PTR_INT__k_s_k_s += 1296;
202 PRIM_PTR_INT__l_s_i_s += 1260;
203 PRIM_PTR_INT__l_s_k_s += 1620;
204 PRIM_PTR_INT__m_s_i_s += 1540;
205 PRIM_PTR_INT__m_s_k_s += 1980;
206 }
207 iprimcd++;
208 for(n = 1; n < SIMINT_SIMD_LEN; ++n)
209 {
210 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
211 {
212 shelloffsets[n] = shelloffsets[n-1] + 1;
213 lastoffset++;
214 nprim_icd += Q.nprim12[cd + (++icd)];
215 }
216 else
217 shelloffsets[n] = shelloffsets[n-1];
218 iprimcd++;
219 }
220 }
221 else
222 iprimcd += SIMINT_SIMD_LEN;
223
224 // Do we have to compute this vector (or has it been screened out)?
225 // (not_screened != 0 means we have to do this vector)
226 if(check_screen)
227 {
228 const double vmax = vector_max(SIMINT_MUL(bra_screen_max, SIMINT_DBLLOAD(Q.screen, j)));
229 if(vmax < screen_tol)
230 {
231 PRIM_PTR_INT__i_s_i_s += lastoffset*784;
232 PRIM_PTR_INT__i_s_k_s += lastoffset*1008;
233 PRIM_PTR_INT__k_s_i_s += lastoffset*1008;
234 PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
235 PRIM_PTR_INT__l_s_i_s += lastoffset*1260;
236 PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
237 PRIM_PTR_INT__m_s_i_s += lastoffset*1540;
238 PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
239 continue;
240 }
241 }
242
243 const SIMINT_DBLTYPE Q_alpha = SIMINT_DBLLOAD(Q.alpha, j);
244 const SIMINT_DBLTYPE PQalpha_mul = SIMINT_MUL(P_alpha, Q_alpha);
245 const SIMINT_DBLTYPE PQalpha_sum = SIMINT_ADD(P_alpha, Q_alpha);
246 const SIMINT_DBLTYPE one_over_PQalpha_sum = SIMINT_DIV(const_1, PQalpha_sum);
247
248
249 /* construct R2 = (Px - Qx)**2 + (Py - Qy)**2 + (Pz -Qz)**2 */
250 SIMINT_DBLTYPE PQ[3];
251 PQ[0] = SIMINT_SUB(Pxyz[0], SIMINT_DBLLOAD(Q.x, j));
252 PQ[1] = SIMINT_SUB(Pxyz[1], SIMINT_DBLLOAD(Q.y, j));
253 PQ[2] = SIMINT_SUB(Pxyz[2], SIMINT_DBLLOAD(Q.z, j));
254 SIMINT_DBLTYPE R2 = SIMINT_MUL(PQ[0], PQ[0]);
255 R2 = SIMINT_FMADD(PQ[1], PQ[1], R2);
256 R2 = SIMINT_FMADD(PQ[2], PQ[2], R2);
257
258 const SIMINT_DBLTYPE alpha = SIMINT_MUL(PQalpha_mul, one_over_PQalpha_sum); // alpha from MEST
259 const SIMINT_DBLTYPE one_over_p = SIMINT_DIV(const_1, P_alpha);
260 const SIMINT_DBLTYPE one_over_q = SIMINT_DIV(const_1, Q_alpha);
261 const SIMINT_DBLTYPE one_over_2p = SIMINT_MUL(one_half, one_over_p);
262 const SIMINT_DBLTYPE one_over_2q = SIMINT_MUL(one_half, one_over_q);
263 const SIMINT_DBLTYPE one_over_2pq = SIMINT_MUL(one_half, one_over_PQalpha_sum);
264 const SIMINT_DBLTYPE Q_PA[3] = { SIMINT_DBLLOAD(Q.PA_x, j), SIMINT_DBLLOAD(Q.PA_y, j), SIMINT_DBLLOAD(Q.PA_z, j) };
265
266 // NOTE: Minus sign!
267 const SIMINT_DBLTYPE a_over_p = SIMINT_MUL(SIMINT_NEG(alpha), one_over_p);
268 SIMINT_DBLTYPE aop_PQ[3];
269 aop_PQ[0] = SIMINT_MUL(a_over_p, PQ[0]);
270 aop_PQ[1] = SIMINT_MUL(a_over_p, PQ[1]);
271 aop_PQ[2] = SIMINT_MUL(a_over_p, PQ[2]);
272
273 SIMINT_DBLTYPE a_over_q = SIMINT_MUL(alpha, one_over_q);
274 SIMINT_DBLTYPE aoq_PQ[3];
275 aoq_PQ[0] = SIMINT_MUL(a_over_q, PQ[0]);
276 aoq_PQ[1] = SIMINT_MUL(a_over_q, PQ[1]);
277 aoq_PQ[2] = SIMINT_MUL(a_over_q, PQ[2]);
278 // Put a minus sign here so we don't have to in RR routines
279 a_over_q = SIMINT_NEG(a_over_q);
280
281
282 //////////////////////////////////////////////
283 // Fjt function section
284 // Maximum v value: 16
285 //////////////////////////////////////////////
286 // The parameter to the Fjt function
287 const SIMINT_DBLTYPE F_x = SIMINT_MUL(R2, alpha);
288
289
290 const SIMINT_DBLTYPE Q_prefac = mask_load(nlane, Q.prefac + j);
291
292
293 boys_F_split(PRIM_INT__s_s_s_s, F_x, 16);
294 SIMINT_DBLTYPE prefac = SIMINT_SQRT(one_over_PQalpha_sum);
295 prefac = SIMINT_MUL(SIMINT_MUL(P_prefac, Q_prefac), prefac);
296 for(n = 0; n <= 16; n++)
297 PRIM_INT__s_s_s_s[n] = SIMINT_MUL(PRIM_INT__s_s_s_s[n], prefac);
298
299 //////////////////////////////////////////////
300 // Primitive integrals: Vertical recurrance
301 //////////////////////////////////////////////
302
303 const SIMINT_DBLTYPE vrr_const_1_over_2p = one_over_2p;
304 const SIMINT_DBLTYPE vrr_const_2_over_2p = SIMINT_MUL(const_2, one_over_2p);
305 const SIMINT_DBLTYPE vrr_const_3_over_2p = SIMINT_MUL(const_3, one_over_2p);
306 const SIMINT_DBLTYPE vrr_const_4_over_2p = SIMINT_MUL(const_4, one_over_2p);
307 const SIMINT_DBLTYPE vrr_const_5_over_2p = SIMINT_MUL(const_5, one_over_2p);
308 const SIMINT_DBLTYPE vrr_const_6_over_2p = SIMINT_MUL(const_6, one_over_2p);
309 const SIMINT_DBLTYPE vrr_const_7_over_2p = SIMINT_MUL(const_7, one_over_2p);
310 const SIMINT_DBLTYPE vrr_const_8_over_2p = SIMINT_MUL(const_8, one_over_2p);
311 const SIMINT_DBLTYPE vrr_const_1_over_2q = one_over_2q;
312 const SIMINT_DBLTYPE vrr_const_2_over_2q = SIMINT_MUL(const_2, one_over_2q);
313 const SIMINT_DBLTYPE vrr_const_3_over_2q = SIMINT_MUL(const_3, one_over_2q);
314 const SIMINT_DBLTYPE vrr_const_4_over_2q = SIMINT_MUL(const_4, one_over_2q);
315 const SIMINT_DBLTYPE vrr_const_5_over_2q = SIMINT_MUL(const_5, one_over_2q);
316 const SIMINT_DBLTYPE vrr_const_6_over_2q = SIMINT_MUL(const_6, one_over_2q);
317 const SIMINT_DBLTYPE vrr_const_1_over_2pq = one_over_2pq;
318 const SIMINT_DBLTYPE vrr_const_2_over_2pq = SIMINT_MUL(const_2, one_over_2pq);
319 const SIMINT_DBLTYPE vrr_const_3_over_2pq = SIMINT_MUL(const_3, one_over_2pq);
320 const SIMINT_DBLTYPE vrr_const_4_over_2pq = SIMINT_MUL(const_4, one_over_2pq);
321 const SIMINT_DBLTYPE vrr_const_5_over_2pq = SIMINT_MUL(const_5, one_over_2pq);
322 const SIMINT_DBLTYPE vrr_const_6_over_2pq = SIMINT_MUL(const_6, one_over_2pq);
323 const SIMINT_DBLTYPE vrr_const_7_over_2pq = SIMINT_MUL(const_7, one_over_2pq);
324 const SIMINT_DBLTYPE vrr_const_8_over_2pq = SIMINT_MUL(const_8, one_over_2pq);
325 const SIMINT_DBLTYPE vrr_const_9_over_2pq = SIMINT_MUL(const_9, one_over_2pq);
326
327
328
329 // Forming PRIM_INT__p_s_s_s[16 * 3];
330 for(n = 0; n < 16; ++n) // loop over orders of auxiliary function
331 {
332
333 PRIM_INT__p_s_s_s[n * 3 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
334 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]);
335
336 PRIM_INT__p_s_s_s[n * 3 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
337 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]);
338
339 PRIM_INT__p_s_s_s[n * 3 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
340 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]);
341
342 }
343
344
345
346 // Forming PRIM_INT__d_s_s_s[15 * 6];
347 for(n = 0; n < 15; ++n) // loop over orders of auxiliary function
348 {
349
350 PRIM_INT__d_s_s_s[n * 6 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
351 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]);
352 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]);
353
354 PRIM_INT__d_s_s_s[n * 6 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
355 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]);
356
357 PRIM_INT__d_s_s_s[n * 6 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
358 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]);
359
360 PRIM_INT__d_s_s_s[n * 6 + 3] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
361 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]);
362 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]);
363
364 PRIM_INT__d_s_s_s[n * 6 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
365 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]);
366
367 PRIM_INT__d_s_s_s[n * 6 + 5] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
368 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]);
369 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]);
370
371 }
372
373
374
375 // Forming PRIM_INT__f_s_s_s[14 * 10];
376 for(n = 0; n < 14; ++n) // loop over orders of auxiliary function
377 {
378
379 PRIM_INT__f_s_s_s[n * 10 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
380 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]);
381 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]);
382
383 PRIM_INT__f_s_s_s[n * 10 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
384 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]);
385
386 PRIM_INT__f_s_s_s[n * 10 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
387 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]);
388
389 PRIM_INT__f_s_s_s[n * 10 + 3] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
390 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]);
391
392 PRIM_INT__f_s_s_s[n * 10 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
393 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]);
394
395 PRIM_INT__f_s_s_s[n * 10 + 5] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
396 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]);
397
398 PRIM_INT__f_s_s_s[n * 10 + 6] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
399 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]);
400 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]);
401
402 PRIM_INT__f_s_s_s[n * 10 + 7] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
403 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]);
404
405 PRIM_INT__f_s_s_s[n * 10 + 8] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
406 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]);
407
408 PRIM_INT__f_s_s_s[n * 10 + 9] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
409 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]);
410 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]);
411
412 }
413
414
415 VRR_I_g_s_s_s(
416 PRIM_INT__g_s_s_s,
417 PRIM_INT__f_s_s_s,
418 PRIM_INT__d_s_s_s,
419 P_PA,
420 a_over_p,
421 aop_PQ,
422 one_over_2p,
423 13);
424
425
426 VRR_I_h_s_s_s(
427 PRIM_INT__h_s_s_s,
428 PRIM_INT__g_s_s_s,
429 PRIM_INT__f_s_s_s,
430 P_PA,
431 a_over_p,
432 aop_PQ,
433 one_over_2p,
434 12);
435
436
437 ostei_general_vrr1_I(6, 11,
438 one_over_2p, a_over_p, aop_PQ, P_PA,
439 PRIM_INT__h_s_s_s, PRIM_INT__g_s_s_s, PRIM_INT__i_s_s_s);
440
441
442 ostei_general_vrr_K(6, 0, 1, 0, 7,
443 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
444 PRIM_INT__i_s_s_s, NULL, NULL, PRIM_INT__h_s_s_s, NULL, PRIM_INT__i_s_p_s);
445
446
447 ostei_general_vrr_K(5, 0, 1, 0, 7,
448 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
449 PRIM_INT__h_s_s_s, NULL, NULL, PRIM_INT__g_s_s_s, NULL, PRIM_INT__h_s_p_s);
450
451
452 ostei_general_vrr_K(6, 0, 2, 0, 6,
453 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
454 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);
455
456
457 VRR_K_g_s_p_s(
458 PRIM_INT__g_s_p_s,
459 PRIM_INT__g_s_s_s,
460 PRIM_INT__f_s_s_s,
461 Q_PA,
462 aoq_PQ,
463 one_over_2pq,
464 7);
465
466
467 ostei_general_vrr_K(5, 0, 2, 0, 6,
468 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
469 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);
470
471
472 ostei_general_vrr_K(6, 0, 3, 0, 5,
473 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
474 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);
475
476
477 VRR_K_f_s_p_s(
478 PRIM_INT__f_s_p_s,
479 PRIM_INT__f_s_s_s,
480 PRIM_INT__d_s_s_s,
481 Q_PA,
482 aoq_PQ,
483 one_over_2pq,
484 7);
485
486
487 ostei_general_vrr_K(4, 0, 2, 0, 6,
488 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
489 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);
490
491
492 ostei_general_vrr_K(5, 0, 3, 0, 5,
493 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
494 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);
495
496
497 ostei_general_vrr_K(6, 0, 4, 0, 4,
498 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
499 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);
500
501
502
503 // Forming PRIM_INT__d_s_p_s[7 * 18];
504 for(n = 0; n < 7; ++n) // loop over orders of auxiliary function
505 {
506
507 PRIM_INT__d_s_p_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
508 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]);
509 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]);
510
511 PRIM_INT__d_s_p_s[n * 18 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
512 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]);
513
514 PRIM_INT__d_s_p_s[n * 18 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
515 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]);
516
517 PRIM_INT__d_s_p_s[n * 18 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 1]);
518 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]);
519 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]);
520
521 PRIM_INT__d_s_p_s[n * 18 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 1]);
522 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]);
523 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]);
524
525 PRIM_INT__d_s_p_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
526 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]);
527
528 PRIM_INT__d_s_p_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 2]);
529 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]);
530 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]);
531
532 PRIM_INT__d_s_p_s[n * 18 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 2]);
533 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]);
534
535 PRIM_INT__d_s_p_s[n * 18 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 2]);
536 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]);
537 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]);
538
539 PRIM_INT__d_s_p_s[n * 18 + 9] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
540 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]);
541
542 PRIM_INT__d_s_p_s[n * 18 + 10] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
543 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]);
544 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]);
545
546 PRIM_INT__d_s_p_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
547 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]);
548
549 PRIM_INT__d_s_p_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 4]);
550 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]);
551
552 PRIM_INT__d_s_p_s[n * 18 + 13] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 4]);
553 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]);
554 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]);
555
556 PRIM_INT__d_s_p_s[n * 18 + 14] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 4]);
557 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]);
558 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]);
559
560 PRIM_INT__d_s_p_s[n * 18 + 15] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
561 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]);
562
563 PRIM_INT__d_s_p_s[n * 18 + 16] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
564 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]);
565
566 PRIM_INT__d_s_p_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
567 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]);
568 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]);
569
570 }
571
572
573 VRR_K_f_s_d_s(
574 PRIM_INT__f_s_d_s,
575 PRIM_INT__f_s_p_s,
576 PRIM_INT__f_s_s_s,
577 PRIM_INT__d_s_p_s,
578 Q_PA,
579 a_over_q,
580 aoq_PQ,
581 one_over_2pq,
582 one_over_2q,
583 6);
584
585
586 ostei_general_vrr_K(4, 0, 3, 0, 5,
587 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
588 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);
589
590
591 ostei_general_vrr_K(5, 0, 4, 0, 4,
592 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
593 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);
594
595
596 ostei_general_vrr_K(6, 0, 5, 0, 3,
597 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
598 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);
599
600
601
602 // Forming PRIM_INT__p_s_p_s[7 * 9];
603 for(n = 0; n < 7; ++n) // loop over orders of auxiliary function
604 {
605
606 PRIM_INT__p_s_p_s[n * 9 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
607 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]);
608 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]);
609
610 PRIM_INT__p_s_p_s[n * 9 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
611 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]);
612
613 PRIM_INT__p_s_p_s[n * 9 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
614 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]);
615
616 PRIM_INT__p_s_p_s[n * 9 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 1]);
617 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]);
618
619 PRIM_INT__p_s_p_s[n * 9 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
620 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]);
621 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]);
622
623 PRIM_INT__p_s_p_s[n * 9 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
624 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]);
625
626 PRIM_INT__p_s_p_s[n * 9 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 2]);
627 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]);
628
629 PRIM_INT__p_s_p_s[n * 9 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 2]);
630 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]);
631
632 PRIM_INT__p_s_p_s[n * 9 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
633 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]);
634 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]);
635
636 }
637
638
639 VRR_K_d_s_d_s(
640 PRIM_INT__d_s_d_s,
641 PRIM_INT__d_s_p_s,
642 PRIM_INT__d_s_s_s,
643 PRIM_INT__p_s_p_s,
644 Q_PA,
645 a_over_q,
646 aoq_PQ,
647 one_over_2pq,
648 one_over_2q,
649 6);
650
651
652 ostei_general_vrr_K(3, 0, 3, 0, 5,
653 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
654 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);
655
656
657 ostei_general_vrr_K(4, 0, 4, 0, 4,
658 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
659 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);
660
661
662 ostei_general_vrr_K(5, 0, 5, 0, 3,
663 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
664 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);
665
666
667 ostei_general_vrr_K(6, 0, 6, 0, 2,
668 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
669 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);
670
671
672
673 // Forming PRIM_INT__s_s_p_s[7 * 3];
674 for(n = 0; n < 7; ++n) // loop over orders of auxiliary function
675 {
676
677 PRIM_INT__s_s_p_s[n * 3 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
678 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]);
679
680 PRIM_INT__s_s_p_s[n * 3 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
681 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]);
682
683 PRIM_INT__s_s_p_s[n * 3 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
684 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]);
685
686 }
687
688
689
690 // Forming PRIM_INT__p_s_d_s[6 * 18];
691 for(n = 0; n < 6; ++n) // loop over orders of auxiliary function
692 {
693
694 PRIM_INT__p_s_d_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 0]);
695 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]);
696 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]);
697 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]);
698
699 PRIM_INT__p_s_d_s[n * 18 + 3] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 1]);
700 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]);
701 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]);
702
703 PRIM_INT__p_s_d_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 2]);
704 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]);
705 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]);
706
707 PRIM_INT__p_s_d_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 3]);
708 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]);
709 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]);
710
711 PRIM_INT__p_s_d_s[n * 18 + 9] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 4]);
712 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]);
713 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]);
714 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]);
715
716 PRIM_INT__p_s_d_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 5]);
717 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]);
718 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]);
719
720 PRIM_INT__p_s_d_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 6]);
721 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]);
722 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]);
723
724 PRIM_INT__p_s_d_s[n * 18 + 15] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 7]);
725 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]);
726 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]);
727
728 PRIM_INT__p_s_d_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 8]);
729 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]);
730 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]);
731 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]);
732
733 }
734
735
736 VRR_K_d_s_f_s(
737 PRIM_INT__d_s_f_s,
738 PRIM_INT__d_s_d_s,
739 PRIM_INT__d_s_p_s,
740 PRIM_INT__p_s_d_s,
741 Q_PA,
742 a_over_q,
743 aoq_PQ,
744 one_over_2pq,
745 one_over_2q,
746 5);
747
748
749 ostei_general_vrr_K(3, 0, 4, 0, 4,
750 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
751 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);
752
753
754 ostei_general_vrr_K(4, 0, 5, 0, 3,
755 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
756 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);
757
758
759 ostei_general_vrr_K(5, 0, 6, 0, 2,
760 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
761 PRIM_INT__h_s_h_s, PRIM_INT__h_s_g_s, NULL, PRIM_INT__g_s_h_s, NULL, PRIM_INT__h_s_i_s);
762
763
764 ostei_general_vrr_K(6, 0, 7, 0, 1,
765 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
766 PRIM_INT__i_s_i_s, PRIM_INT__i_s_h_s, NULL, PRIM_INT__h_s_i_s, NULL, PRIM_INT__i_s_k_s);
767
768
769 ostei_general_vrr1_I(7, 10,
770 one_over_2p, a_over_p, aop_PQ, P_PA,
771 PRIM_INT__i_s_s_s, PRIM_INT__h_s_s_s, PRIM_INT__k_s_s_s);
772
773
774 ostei_general_vrr_K(7, 0, 1, 0, 7,
775 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
776 PRIM_INT__k_s_s_s, NULL, NULL, PRIM_INT__i_s_s_s, NULL, PRIM_INT__k_s_p_s);
777
778
779 ostei_general_vrr_K(7, 0, 2, 0, 6,
780 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
781 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);
782
783
784 ostei_general_vrr_K(7, 0, 3, 0, 5,
785 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
786 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);
787
788
789 ostei_general_vrr_K(7, 0, 4, 0, 4,
790 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
791 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);
792
793
794 ostei_general_vrr_K(7, 0, 5, 0, 3,
795 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
796 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);
797
798
799 ostei_general_vrr_K(7, 0, 6, 0, 2,
800 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
801 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);
802
803
804 ostei_general_vrr_K(7, 0, 7, 0, 1,
805 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
806 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);
807
808
809 ostei_general_vrr1_I(8, 9,
810 one_over_2p, a_over_p, aop_PQ, P_PA,
811 PRIM_INT__k_s_s_s, PRIM_INT__i_s_s_s, PRIM_INT__l_s_s_s);
812
813
814 ostei_general_vrr_K(8, 0, 1, 0, 7,
815 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
816 PRIM_INT__l_s_s_s, NULL, NULL, PRIM_INT__k_s_s_s, NULL, PRIM_INT__l_s_p_s);
817
818
819 ostei_general_vrr_K(8, 0, 2, 0, 6,
820 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
821 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);
822
823
824 ostei_general_vrr_K(8, 0, 3, 0, 5,
825 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
826 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);
827
828
829 ostei_general_vrr_K(8, 0, 4, 0, 4,
830 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
831 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);
832
833
834 ostei_general_vrr_K(8, 0, 5, 0, 3,
835 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
836 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);
837
838
839 ostei_general_vrr_K(8, 0, 6, 0, 2,
840 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
841 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);
842
843
844 ostei_general_vrr_K(8, 0, 7, 0, 1,
845 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
846 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);
847
848
849 ostei_general_vrr1_I(9, 8,
850 one_over_2p, a_over_p, aop_PQ, P_PA,
851 PRIM_INT__l_s_s_s, PRIM_INT__k_s_s_s, PRIM_INT__m_s_s_s);
852
853
854 ostei_general_vrr_K(9, 0, 1, 0, 7,
855 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
856 PRIM_INT__m_s_s_s, NULL, NULL, PRIM_INT__l_s_s_s, NULL, PRIM_INT__m_s_p_s);
857
858
859 ostei_general_vrr_K(9, 0, 2, 0, 6,
860 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
861 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);
862
863
864 ostei_general_vrr_K(9, 0, 3, 0, 5,
865 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
866 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);
867
868
869 ostei_general_vrr_K(9, 0, 4, 0, 4,
870 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
871 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);
872
873
874 ostei_general_vrr_K(9, 0, 5, 0, 3,
875 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
876 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);
877
878
879 ostei_general_vrr_K(9, 0, 6, 0, 2,
880 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
881 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);
882
883
884 ostei_general_vrr_K(9, 0, 7, 0, 1,
885 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
886 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);
887
888
889
890
891 ////////////////////////////////////
892 // Accumulate contracted integrals
893 ////////////////////////////////////
894 if(lastoffset == 0)
895 {
896 contract_all(784, PRIM_INT__i_s_i_s, PRIM_PTR_INT__i_s_i_s);
897 contract_all(1008, PRIM_INT__i_s_k_s, PRIM_PTR_INT__i_s_k_s);
898 contract_all(1008, PRIM_INT__k_s_i_s, PRIM_PTR_INT__k_s_i_s);
899 contract_all(1296, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
900 contract_all(1260, PRIM_INT__l_s_i_s, PRIM_PTR_INT__l_s_i_s);
901 contract_all(1620, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
902 contract_all(1540, PRIM_INT__m_s_i_s, PRIM_PTR_INT__m_s_i_s);
903 contract_all(1980, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
904 }
905 else
906 {
907 contract(784, shelloffsets, PRIM_INT__i_s_i_s, PRIM_PTR_INT__i_s_i_s);
908 contract(1008, shelloffsets, PRIM_INT__i_s_k_s, PRIM_PTR_INT__i_s_k_s);
909 contract(1008, shelloffsets, PRIM_INT__k_s_i_s, PRIM_PTR_INT__k_s_i_s);
910 contract(1296, shelloffsets, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
911 contract(1260, shelloffsets, PRIM_INT__l_s_i_s, PRIM_PTR_INT__l_s_i_s);
912 contract(1620, shelloffsets, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
913 contract(1540, shelloffsets, PRIM_INT__m_s_i_s, PRIM_PTR_INT__m_s_i_s);
914 contract(1980, shelloffsets, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
915 PRIM_PTR_INT__i_s_i_s += lastoffset*784;
916 PRIM_PTR_INT__i_s_k_s += lastoffset*1008;
917 PRIM_PTR_INT__k_s_i_s += lastoffset*1008;
918 PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
919 PRIM_PTR_INT__l_s_i_s += lastoffset*1260;
920 PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
921 PRIM_PTR_INT__m_s_i_s += lastoffset*1540;
922 PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
923 }
924
925 } // close loop over j
926 } // close loop over i
927
928 //Advance to the next batch
929 jstart = SIMINT_SIMD_ROUND(jend);
930
931 //////////////////////////////////////////////
932 // Contracted integrals: Horizontal recurrance
933 //////////////////////////////////////////////
934
935
936 const double hAB[3] = { P.AB_x[ab], P.AB_y[ab], P.AB_z[ab] };
937
938
939 for(abcd = 0; abcd < nshellbatch; ++abcd, ++real_abcd)
940 {
941 const double hCD[3] = { Q.AB_x[cd+abcd], Q.AB_y[cd+abcd], Q.AB_z[cd+abcd] };
942
943 // set up HRR pointers
944 double const * restrict HRR_INT__i_s_i_s = INT__i_s_i_s + abcd * 784;
945 double const * restrict HRR_INT__i_s_k_s = INT__i_s_k_s + abcd * 1008;
946 double const * restrict HRR_INT__k_s_i_s = INT__k_s_i_s + abcd * 1008;
947 double const * restrict HRR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
948 double const * restrict HRR_INT__l_s_i_s = INT__l_s_i_s + abcd * 1260;
949 double const * restrict HRR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
950 double const * restrict HRR_INT__m_s_i_s = INT__m_s_i_s + abcd * 1540;
951 double const * restrict HRR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
952 double * restrict HRR_INT__i_f_i_p = INT__i_f_i_p + real_abcd * 23520;
953
954 // form INT__i_p_i_s
955 ostei_general_hrr_J(6, 1, 6, 0, hAB, HRR_INT__k_s_i_s, HRR_INT__i_s_i_s, HRR_INT__i_p_i_s);
956
957 // form INT__i_p_k_s
958 ostei_general_hrr_J(6, 1, 7, 0, hAB, HRR_INT__k_s_k_s, HRR_INT__i_s_k_s, HRR_INT__i_p_k_s);
959
960 // form INT__k_p_i_s
961 ostei_general_hrr_J(7, 1, 6, 0, hAB, HRR_INT__l_s_i_s, HRR_INT__k_s_i_s, HRR_INT__k_p_i_s);
962
963 // form INT__k_p_k_s
964 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);
965
966 // form INT__l_p_i_s
967 ostei_general_hrr_J(8, 1, 6, 0, hAB, HRR_INT__m_s_i_s, HRR_INT__l_s_i_s, HRR_INT__l_p_i_s);
968
969 // form INT__l_p_k_s
970 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);
971
972 // form INT__i_d_i_s
973 ostei_general_hrr_J(6, 2, 6, 0, hAB, HRR_INT__k_p_i_s, HRR_INT__i_p_i_s, HRR_INT__i_d_i_s);
974
975 // form INT__i_d_k_s
976 ostei_general_hrr_J(6, 2, 7, 0, hAB, HRR_INT__k_p_k_s, HRR_INT__i_p_k_s, HRR_INT__i_d_k_s);
977
978 // form INT__k_d_i_s
979 ostei_general_hrr_J(7, 2, 6, 0, hAB, HRR_INT__l_p_i_s, HRR_INT__k_p_i_s, HRR_INT__k_d_i_s);
980
981 // form INT__k_d_k_s
982 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);
983
984 // form INT__i_f_i_s
985 ostei_general_hrr_J(6, 3, 6, 0, hAB, HRR_INT__k_d_i_s, HRR_INT__i_d_i_s, HRR_INT__i_f_i_s);
986
987 // form INT__i_f_k_s
988 ostei_general_hrr_J(6, 3, 7, 0, hAB, HRR_INT__k_d_k_s, HRR_INT__i_d_k_s, HRR_INT__i_f_k_s);
989
990 // form INT__i_f_i_p
991 ostei_general_hrr_L(6, 3, 6, 1, hCD, HRR_INT__i_f_k_s, HRR_INT__i_f_i_s, HRR_INT__i_f_i_p);
992
993
994 } // close HRR loop
995
996
997 } // close loop cdbatch
998
999 istart = iend;
1000 } // close loop over ab
1001
1002 return P.nshell12_clip * Q.nshell12_clip;
1003 }
1004
ostei_f_i_i_p(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__f_i_i_p)1005 int ostei_f_i_i_p(struct simint_multi_shellpair const P,
1006 struct simint_multi_shellpair const Q,
1007 double screen_tol,
1008 double * const restrict work,
1009 double * const restrict INT__f_i_i_p)
1010 {
1011 double P_AB[3*P.nshell12];
1012 struct simint_multi_shellpair P_tmp = P;
1013 P_tmp.PA_x = P.PB_x; P_tmp.PA_y = P.PB_y; P_tmp.PA_z = P.PB_z;
1014 P_tmp.PB_x = P.PA_x; P_tmp.PB_y = P.PA_y; P_tmp.PB_z = P.PA_z;
1015 P_tmp.AB_x = P_AB;
1016 P_tmp.AB_y = P_AB + P.nshell12;
1017 P_tmp.AB_z = P_AB + 2*P.nshell12;
1018
1019 for(int i = 0; i < P.nshell12; i++)
1020 {
1021 P_tmp.AB_x[i] = -P.AB_x[i];
1022 P_tmp.AB_y[i] = -P.AB_y[i];
1023 P_tmp.AB_z[i] = -P.AB_z[i];
1024 }
1025
1026 int ret = ostei_i_f_i_p(P_tmp, Q, screen_tol, work, INT__f_i_i_p);
1027 double buffer[23520] SIMINT_ALIGN_ARRAY_DBL;
1028
1029 for(int q = 0; q < ret; q++)
1030 {
1031 int idx = 0;
1032 for(int a = 0; a < 10; ++a)
1033 for(int b = 0; b < 28; ++b)
1034 for(int c = 0; c < 28; ++c)
1035 for(int d = 0; d < 3; ++d)
1036 buffer[idx++] = INT__f_i_i_p[q*23520+b*840+a*84+c*3+d];
1037
1038 memcpy(INT__f_i_i_p+q*23520, buffer, 23520*sizeof(double));
1039 }
1040
1041 return ret;
1042 }
1043
ostei_i_f_p_i(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__i_f_p_i)1044 int ostei_i_f_p_i(struct simint_multi_shellpair const P,
1045 struct simint_multi_shellpair const Q,
1046 double screen_tol,
1047 double * const restrict work,
1048 double * const restrict INT__i_f_p_i)
1049 {
1050 double Q_AB[3*Q.nshell12];
1051 struct simint_multi_shellpair Q_tmp = Q;
1052 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1053 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1054 Q_tmp.AB_x = Q_AB;
1055 Q_tmp.AB_y = Q_AB + Q.nshell12;
1056 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1057
1058 for(int i = 0; i < Q.nshell12; i++)
1059 {
1060 Q_tmp.AB_x[i] = -Q.AB_x[i];
1061 Q_tmp.AB_y[i] = -Q.AB_y[i];
1062 Q_tmp.AB_z[i] = -Q.AB_z[i];
1063 }
1064
1065 int ret = ostei_i_f_i_p(P, Q_tmp, screen_tol, work, INT__i_f_p_i);
1066 double buffer[23520] SIMINT_ALIGN_ARRAY_DBL;
1067
1068 for(int q = 0; q < ret; q++)
1069 {
1070 int idx = 0;
1071 for(int a = 0; a < 28; ++a)
1072 for(int b = 0; b < 10; ++b)
1073 for(int c = 0; c < 3; ++c)
1074 for(int d = 0; d < 28; ++d)
1075 buffer[idx++] = INT__i_f_p_i[q*23520+a*840+b*84+d*3+c];
1076
1077 memcpy(INT__i_f_p_i+q*23520, buffer, 23520*sizeof(double));
1078 }
1079
1080 return ret;
1081 }
1082
ostei_f_i_p_i(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__f_i_p_i)1083 int ostei_f_i_p_i(struct simint_multi_shellpair const P,
1084 struct simint_multi_shellpair const Q,
1085 double screen_tol,
1086 double * const restrict work,
1087 double * const restrict INT__f_i_p_i)
1088 {
1089 double P_AB[3*P.nshell12];
1090 struct simint_multi_shellpair P_tmp = P;
1091 P_tmp.PA_x = P.PB_x; P_tmp.PA_y = P.PB_y; P_tmp.PA_z = P.PB_z;
1092 P_tmp.PB_x = P.PA_x; P_tmp.PB_y = P.PA_y; P_tmp.PB_z = P.PA_z;
1093 P_tmp.AB_x = P_AB;
1094 P_tmp.AB_y = P_AB + P.nshell12;
1095 P_tmp.AB_z = P_AB + 2*P.nshell12;
1096
1097 for(int i = 0; i < P.nshell12; i++)
1098 {
1099 P_tmp.AB_x[i] = -P.AB_x[i];
1100 P_tmp.AB_y[i] = -P.AB_y[i];
1101 P_tmp.AB_z[i] = -P.AB_z[i];
1102 }
1103
1104 double Q_AB[3*Q.nshell12];
1105 struct simint_multi_shellpair Q_tmp = Q;
1106 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1107 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1108 Q_tmp.AB_x = Q_AB;
1109 Q_tmp.AB_y = Q_AB + Q.nshell12;
1110 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1111
1112 for(int i = 0; i < Q.nshell12; i++)
1113 {
1114 Q_tmp.AB_x[i] = -Q.AB_x[i];
1115 Q_tmp.AB_y[i] = -Q.AB_y[i];
1116 Q_tmp.AB_z[i] = -Q.AB_z[i];
1117 }
1118
1119 int ret = ostei_i_f_i_p(P_tmp, Q_tmp, screen_tol, work, INT__f_i_p_i);
1120 double buffer[23520] SIMINT_ALIGN_ARRAY_DBL;
1121
1122 for(int q = 0; q < ret; q++)
1123 {
1124 int idx = 0;
1125 for(int a = 0; a < 10; ++a)
1126 for(int b = 0; b < 28; ++b)
1127 for(int c = 0; c < 3; ++c)
1128 for(int d = 0; d < 28; ++d)
1129 buffer[idx++] = INT__f_i_p_i[q*23520+b*840+a*84+d*3+c];
1130
1131 memcpy(INT__f_i_p_i+q*23520, buffer, 23520*sizeof(double));
1132 }
1133
1134 return ret;
1135 }
1136
1137