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