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_f_k_d(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__k_f_k_d)8 int ostei_k_f_k_d(struct simint_multi_shellpair const P,
9 struct simint_multi_shellpair const Q,
10 double screen_tol,
11 double * const restrict work,
12 double * const restrict INT__k_f_k_d)
13 {
14
15 SIMINT_ASSUME_ALIGN_DBL(work);
16 SIMINT_ASSUME_ALIGN_DBL(INT__k_f_k_d);
17 int ab, cd, abcd;
18 int istart, jstart;
19 int iprimcd, nprim_icd, icd;
20 const int check_screen = (screen_tol > 0.0);
21 int i, j;
22 int n;
23 int not_screened;
24 int real_abcd;
25 int iket;
26 int ibra;
27
28 // partition workspace
29 double * const INT__k_s_k_s = work + (SIMINT_NSHELL_SIMD * 0);
30 double * const INT__k_s_l_s = work + (SIMINT_NSHELL_SIMD * 1296);
31 double * const INT__k_s_m_s = work + (SIMINT_NSHELL_SIMD * 2916);
32 double * const INT__l_s_k_s = work + (SIMINT_NSHELL_SIMD * 4896);
33 double * const INT__l_s_l_s = work + (SIMINT_NSHELL_SIMD * 6516);
34 double * const INT__l_s_m_s = work + (SIMINT_NSHELL_SIMD * 8541);
35 double * const INT__m_s_k_s = work + (SIMINT_NSHELL_SIMD * 11016);
36 double * const INT__m_s_l_s = work + (SIMINT_NSHELL_SIMD * 12996);
37 double * const INT__m_s_m_s = work + (SIMINT_NSHELL_SIMD * 15471);
38 double * const INT__n_s_k_s = work + (SIMINT_NSHELL_SIMD * 18496);
39 double * const INT__n_s_l_s = work + (SIMINT_NSHELL_SIMD * 20872);
40 double * const INT__n_s_m_s = work + (SIMINT_NSHELL_SIMD * 23842);
41 SIMINT_DBLTYPE * const primwork = (SIMINT_DBLTYPE *)(work + SIMINT_NSHELL_SIMD*27472);
42 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_s_s = primwork + 0;
43 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_p_s = primwork + 20;
44 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_d_s = primwork + 47;
45 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_s_s = primwork + 95;
46 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_p_s = primwork + 152;
47 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_d_s = primwork + 233;
48 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_f_s = primwork + 377;
49 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_s_s = primwork + 587;
50 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_p_s = primwork + 695;
51 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_d_s = primwork + 857;
52 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_f_s = primwork + 1145;
53 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_g_s = primwork + 1565;
54 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_s_s = primwork + 2105;
55 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_p_s = primwork + 2275;
56 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_d_s = primwork + 2545;
57 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_f_s = primwork + 3025;
58 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_g_s = primwork + 3725;
59 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_h_s = primwork + 4625;
60 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_s_s = primwork + 5675;
61 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_p_s = primwork + 5915;
62 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_d_s = primwork + 6320;
63 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_f_s = primwork + 7040;
64 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_g_s = primwork + 8090;
65 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_h_s = primwork + 9440;
66 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_i_s = primwork + 11015;
67 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_s_s = primwork + 12695;
68 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_p_s = primwork + 13010;
69 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_d_s = primwork + 13577;
70 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_f_s = primwork + 14585;
71 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_g_s = primwork + 16055;
72 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_h_s = primwork + 17945;
73 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_i_s = primwork + 20150;
74 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_k_s = primwork + 22502;
75 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_s_s = primwork + 24770;
76 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_p_s = primwork + 25162;
77 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_d_s = primwork + 25918;
78 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_f_s = primwork + 27262;
79 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_g_s = primwork + 29222;
80 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_h_s = primwork + 31742;
81 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_i_s = primwork + 34682;
82 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_k_s = primwork + 37818;
83 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_l_s = primwork + 40842;
84 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_s_s = primwork + 43362;
85 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_p_s = primwork + 43830;
86 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_d_s = primwork + 44802;
87 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_f_s = primwork + 46530;
88 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_g_s = primwork + 49050;
89 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_h_s = primwork + 52290;
90 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_i_s = primwork + 56070;
91 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_k_s = primwork + 60102;
92 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_l_s = primwork + 63990;
93 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_m_s = primwork + 67230;
94 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_s_s = primwork + 69210;
95 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_p_s = primwork + 69750;
96 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_d_s = primwork + 70965;
97 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_f_s = primwork + 73125;
98 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_g_s = primwork + 76275;
99 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_h_s = primwork + 80325;
100 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_i_s = primwork + 85050;
101 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_k_s = primwork + 90090;
102 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_l_s = primwork + 94950;
103 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_m_s = primwork + 99000;
104 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_s_s = primwork + 101475;
105 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_p_s = primwork + 102080;
106 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_d_s = primwork + 103565;
107 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_f_s = primwork + 106205;
108 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_g_s = primwork + 110055;
109 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_h_s = primwork + 115005;
110 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_i_s = primwork + 120780;
111 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_k_s = primwork + 126940;
112 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_l_s = primwork + 132880;
113 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_m_s = primwork + 137830;
114 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_s_s = primwork + 140855;
115 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_p_s = primwork + 141515;
116 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_d_s = primwork + 143297;
117 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_f_s = primwork + 146465;
118 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_g_s = primwork + 151085;
119 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_h_s = primwork + 157025;
120 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_i_s = primwork + 163955;
121 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_k_s = primwork + 171347;
122 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_l_s = primwork + 178475;
123 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_m_s = primwork + 184415;
124 double * const hrrwork = (double *)(primwork + 188045);
125 double * const HRR_INT__k_p_k_s = hrrwork + 0;
126 double * const HRR_INT__k_p_l_s = hrrwork + 3888;
127 double * const HRR_INT__k_p_m_s = hrrwork + 8748;
128 double * const HRR_INT__k_d_k_s = hrrwork + 14688;
129 double * const HRR_INT__k_d_l_s = hrrwork + 22464;
130 double * const HRR_INT__k_d_m_s = hrrwork + 32184;
131 double * const HRR_INT__k_f_k_s = hrrwork + 44064;
132 double * const HRR_INT__k_f_k_p = hrrwork + 57024;
133 double * const HRR_INT__k_f_l_s = hrrwork + 95904;
134 double * const HRR_INT__k_f_l_p = hrrwork + 112104;
135 double * const HRR_INT__k_f_m_s = hrrwork + 160704;
136 double * const HRR_INT__l_p_k_s = hrrwork + 180504;
137 double * const HRR_INT__l_p_l_s = hrrwork + 185364;
138 double * const HRR_INT__l_p_m_s = hrrwork + 191439;
139 double * const HRR_INT__l_d_k_s = hrrwork + 198864;
140 double * const HRR_INT__l_d_l_s = hrrwork + 208584;
141 double * const HRR_INT__l_d_m_s = hrrwork + 220734;
142 double * const HRR_INT__m_p_k_s = hrrwork + 235584;
143 double * const HRR_INT__m_p_l_s = hrrwork + 241524;
144 double * const HRR_INT__m_p_m_s = hrrwork + 248949;
145
146
147 // Create constants
148 const SIMINT_DBLTYPE const_1 = SIMINT_DBLSET1(1);
149 const SIMINT_DBLTYPE const_10 = SIMINT_DBLSET1(10);
150 const SIMINT_DBLTYPE const_2 = SIMINT_DBLSET1(2);
151 const SIMINT_DBLTYPE const_3 = SIMINT_DBLSET1(3);
152 const SIMINT_DBLTYPE const_4 = SIMINT_DBLSET1(4);
153 const SIMINT_DBLTYPE const_5 = SIMINT_DBLSET1(5);
154 const SIMINT_DBLTYPE const_6 = SIMINT_DBLSET1(6);
155 const SIMINT_DBLTYPE const_7 = SIMINT_DBLSET1(7);
156 const SIMINT_DBLTYPE const_8 = SIMINT_DBLSET1(8);
157 const SIMINT_DBLTYPE const_9 = SIMINT_DBLSET1(9);
158 const SIMINT_DBLTYPE one_half = SIMINT_DBLSET1(0.5);
159
160
161 ////////////////////////////////////////
162 // Loop over shells and primitives
163 ////////////////////////////////////////
164
165 real_abcd = 0;
166 istart = 0;
167 for(ab = 0; ab < P.nshell12_clip; ++ab)
168 {
169 const int iend = istart + P.nprim12[ab];
170
171 cd = 0;
172 jstart = 0;
173
174 for(cd = 0; cd < Q.nshell12_clip; cd += SIMINT_NSHELL_SIMD)
175 {
176 const int nshellbatch = ((cd + SIMINT_NSHELL_SIMD) > Q.nshell12_clip) ? Q.nshell12_clip - cd : SIMINT_NSHELL_SIMD;
177 int jend = jstart;
178 for(i = 0; i < nshellbatch; i++)
179 jend += Q.nprim12[cd+i];
180
181 // Clear the beginning of the workspace (where we are accumulating integrals)
182 memset(work, 0, SIMINT_NSHELL_SIMD * 27472 * sizeof(double));
183 abcd = 0;
184
185
186 for(i = istart; i < iend; ++i)
187 {
188 SIMINT_DBLTYPE bra_screen_max; // only used if check_screen
189
190 if(check_screen)
191 {
192 // Skip this whole thing if always insignificant
193 if((P.screen[i] * Q.screen_max) < screen_tol)
194 continue;
195 bra_screen_max = SIMINT_DBLSET1(P.screen[i]);
196 }
197
198 icd = 0;
199 iprimcd = 0;
200 nprim_icd = Q.nprim12[cd];
201 double * restrict PRIM_PTR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
202 double * restrict PRIM_PTR_INT__k_s_l_s = INT__k_s_l_s + abcd * 1620;
203 double * restrict PRIM_PTR_INT__k_s_m_s = INT__k_s_m_s + abcd * 1980;
204 double * restrict PRIM_PTR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
205 double * restrict PRIM_PTR_INT__l_s_l_s = INT__l_s_l_s + abcd * 2025;
206 double * restrict PRIM_PTR_INT__l_s_m_s = INT__l_s_m_s + abcd * 2475;
207 double * restrict PRIM_PTR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
208 double * restrict PRIM_PTR_INT__m_s_l_s = INT__m_s_l_s + abcd * 2475;
209 double * restrict PRIM_PTR_INT__m_s_m_s = INT__m_s_m_s + abcd * 3025;
210 double * restrict PRIM_PTR_INT__n_s_k_s = INT__n_s_k_s + abcd * 2376;
211 double * restrict PRIM_PTR_INT__n_s_l_s = INT__n_s_l_s + abcd * 2970;
212 double * restrict PRIM_PTR_INT__n_s_m_s = INT__n_s_m_s + abcd * 3630;
213
214
215
216 // Load these one per loop over i
217 const SIMINT_DBLTYPE P_alpha = SIMINT_DBLSET1(P.alpha[i]);
218 const SIMINT_DBLTYPE P_prefac = SIMINT_DBLSET1(P.prefac[i]);
219 const SIMINT_DBLTYPE Pxyz[3] = { SIMINT_DBLSET1(P.x[i]), SIMINT_DBLSET1(P.y[i]), SIMINT_DBLSET1(P.z[i]) };
220
221 const SIMINT_DBLTYPE P_PA[3] = { SIMINT_DBLSET1(P.PA_x[i]), SIMINT_DBLSET1(P.PA_y[i]), SIMINT_DBLSET1(P.PA_z[i]) };
222
223 for(j = jstart; j < jend; j += SIMINT_SIMD_LEN)
224 {
225 // calculate the shell offsets
226 // these are the offset from the shell pointed to by cd
227 // for each element
228 int shelloffsets[SIMINT_SIMD_LEN] = {0};
229 int lastoffset = 0;
230 const int nlane = ( ((j + SIMINT_SIMD_LEN) < jend) ? SIMINT_SIMD_LEN : (jend - j));
231
232 if((iprimcd + SIMINT_SIMD_LEN) >= nprim_icd)
233 {
234 // Handle if the first element of the vector is a new shell
235 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
236 {
237 nprim_icd += Q.nprim12[cd + (++icd)];
238 PRIM_PTR_INT__k_s_k_s += 1296;
239 PRIM_PTR_INT__k_s_l_s += 1620;
240 PRIM_PTR_INT__k_s_m_s += 1980;
241 PRIM_PTR_INT__l_s_k_s += 1620;
242 PRIM_PTR_INT__l_s_l_s += 2025;
243 PRIM_PTR_INT__l_s_m_s += 2475;
244 PRIM_PTR_INT__m_s_k_s += 1980;
245 PRIM_PTR_INT__m_s_l_s += 2475;
246 PRIM_PTR_INT__m_s_m_s += 3025;
247 PRIM_PTR_INT__n_s_k_s += 2376;
248 PRIM_PTR_INT__n_s_l_s += 2970;
249 PRIM_PTR_INT__n_s_m_s += 3630;
250 }
251 iprimcd++;
252 for(n = 1; n < SIMINT_SIMD_LEN; ++n)
253 {
254 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
255 {
256 shelloffsets[n] = shelloffsets[n-1] + 1;
257 lastoffset++;
258 nprim_icd += Q.nprim12[cd + (++icd)];
259 }
260 else
261 shelloffsets[n] = shelloffsets[n-1];
262 iprimcd++;
263 }
264 }
265 else
266 iprimcd += SIMINT_SIMD_LEN;
267
268 // Do we have to compute this vector (or has it been screened out)?
269 // (not_screened != 0 means we have to do this vector)
270 if(check_screen)
271 {
272 const double vmax = vector_max(SIMINT_MUL(bra_screen_max, SIMINT_DBLLOAD(Q.screen, j)));
273 if(vmax < screen_tol)
274 {
275 PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
276 PRIM_PTR_INT__k_s_l_s += lastoffset*1620;
277 PRIM_PTR_INT__k_s_m_s += lastoffset*1980;
278 PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
279 PRIM_PTR_INT__l_s_l_s += lastoffset*2025;
280 PRIM_PTR_INT__l_s_m_s += lastoffset*2475;
281 PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
282 PRIM_PTR_INT__m_s_l_s += lastoffset*2475;
283 PRIM_PTR_INT__m_s_m_s += lastoffset*3025;
284 PRIM_PTR_INT__n_s_k_s += lastoffset*2376;
285 PRIM_PTR_INT__n_s_l_s += lastoffset*2970;
286 PRIM_PTR_INT__n_s_m_s += lastoffset*3630;
287 continue;
288 }
289 }
290
291 const SIMINT_DBLTYPE Q_alpha = SIMINT_DBLLOAD(Q.alpha, j);
292 const SIMINT_DBLTYPE PQalpha_mul = SIMINT_MUL(P_alpha, Q_alpha);
293 const SIMINT_DBLTYPE PQalpha_sum = SIMINT_ADD(P_alpha, Q_alpha);
294 const SIMINT_DBLTYPE one_over_PQalpha_sum = SIMINT_DIV(const_1, PQalpha_sum);
295
296
297 /* construct R2 = (Px - Qx)**2 + (Py - Qy)**2 + (Pz -Qz)**2 */
298 SIMINT_DBLTYPE PQ[3];
299 PQ[0] = SIMINT_SUB(Pxyz[0], SIMINT_DBLLOAD(Q.x, j));
300 PQ[1] = SIMINT_SUB(Pxyz[1], SIMINT_DBLLOAD(Q.y, j));
301 PQ[2] = SIMINT_SUB(Pxyz[2], SIMINT_DBLLOAD(Q.z, j));
302 SIMINT_DBLTYPE R2 = SIMINT_MUL(PQ[0], PQ[0]);
303 R2 = SIMINT_FMADD(PQ[1], PQ[1], R2);
304 R2 = SIMINT_FMADD(PQ[2], PQ[2], R2);
305
306 const SIMINT_DBLTYPE alpha = SIMINT_MUL(PQalpha_mul, one_over_PQalpha_sum); // alpha from MEST
307 const SIMINT_DBLTYPE one_over_p = SIMINT_DIV(const_1, P_alpha);
308 const SIMINT_DBLTYPE one_over_q = SIMINT_DIV(const_1, Q_alpha);
309 const SIMINT_DBLTYPE one_over_2p = SIMINT_MUL(one_half, one_over_p);
310 const SIMINT_DBLTYPE one_over_2q = SIMINT_MUL(one_half, one_over_q);
311 const SIMINT_DBLTYPE one_over_2pq = SIMINT_MUL(one_half, one_over_PQalpha_sum);
312 const SIMINT_DBLTYPE Q_PA[3] = { SIMINT_DBLLOAD(Q.PA_x, j), SIMINT_DBLLOAD(Q.PA_y, j), SIMINT_DBLLOAD(Q.PA_z, j) };
313
314 // NOTE: Minus sign!
315 const SIMINT_DBLTYPE a_over_p = SIMINT_MUL(SIMINT_NEG(alpha), one_over_p);
316 SIMINT_DBLTYPE aop_PQ[3];
317 aop_PQ[0] = SIMINT_MUL(a_over_p, PQ[0]);
318 aop_PQ[1] = SIMINT_MUL(a_over_p, PQ[1]);
319 aop_PQ[2] = SIMINT_MUL(a_over_p, PQ[2]);
320
321 SIMINT_DBLTYPE a_over_q = SIMINT_MUL(alpha, one_over_q);
322 SIMINT_DBLTYPE aoq_PQ[3];
323 aoq_PQ[0] = SIMINT_MUL(a_over_q, PQ[0]);
324 aoq_PQ[1] = SIMINT_MUL(a_over_q, PQ[1]);
325 aoq_PQ[2] = SIMINT_MUL(a_over_q, PQ[2]);
326 // Put a minus sign here so we don't have to in RR routines
327 a_over_q = SIMINT_NEG(a_over_q);
328
329
330 //////////////////////////////////////////////
331 // Fjt function section
332 // Maximum v value: 19
333 //////////////////////////////////////////////
334 // The parameter to the Fjt function
335 const SIMINT_DBLTYPE F_x = SIMINT_MUL(R2, alpha);
336
337
338 const SIMINT_DBLTYPE Q_prefac = mask_load(nlane, Q.prefac + j);
339
340
341 boys_F_split(PRIM_INT__s_s_s_s, F_x, 19);
342 SIMINT_DBLTYPE prefac = SIMINT_SQRT(one_over_PQalpha_sum);
343 prefac = SIMINT_MUL(SIMINT_MUL(P_prefac, Q_prefac), prefac);
344 for(n = 0; n <= 19; n++)
345 PRIM_INT__s_s_s_s[n] = SIMINT_MUL(PRIM_INT__s_s_s_s[n], prefac);
346
347 //////////////////////////////////////////////
348 // Primitive integrals: Vertical recurrance
349 //////////////////////////////////////////////
350
351 const SIMINT_DBLTYPE vrr_const_1_over_2p = one_over_2p;
352 const SIMINT_DBLTYPE vrr_const_2_over_2p = SIMINT_MUL(const_2, one_over_2p);
353 const SIMINT_DBLTYPE vrr_const_3_over_2p = SIMINT_MUL(const_3, one_over_2p);
354 const SIMINT_DBLTYPE vrr_const_4_over_2p = SIMINT_MUL(const_4, one_over_2p);
355 const SIMINT_DBLTYPE vrr_const_5_over_2p = SIMINT_MUL(const_5, one_over_2p);
356 const SIMINT_DBLTYPE vrr_const_6_over_2p = SIMINT_MUL(const_6, one_over_2p);
357 const SIMINT_DBLTYPE vrr_const_7_over_2p = SIMINT_MUL(const_7, one_over_2p);
358 const SIMINT_DBLTYPE vrr_const_8_over_2p = SIMINT_MUL(const_8, one_over_2p);
359 const SIMINT_DBLTYPE vrr_const_9_over_2p = SIMINT_MUL(const_9, one_over_2p);
360 const SIMINT_DBLTYPE vrr_const_1_over_2q = one_over_2q;
361 const SIMINT_DBLTYPE vrr_const_2_over_2q = SIMINT_MUL(const_2, one_over_2q);
362 const SIMINT_DBLTYPE vrr_const_3_over_2q = SIMINT_MUL(const_3, one_over_2q);
363 const SIMINT_DBLTYPE vrr_const_4_over_2q = SIMINT_MUL(const_4, one_over_2q);
364 const SIMINT_DBLTYPE vrr_const_5_over_2q = SIMINT_MUL(const_5, one_over_2q);
365 const SIMINT_DBLTYPE vrr_const_6_over_2q = SIMINT_MUL(const_6, one_over_2q);
366 const SIMINT_DBLTYPE vrr_const_7_over_2q = SIMINT_MUL(const_7, one_over_2q);
367 const SIMINT_DBLTYPE vrr_const_8_over_2q = SIMINT_MUL(const_8, one_over_2q);
368 const SIMINT_DBLTYPE vrr_const_1_over_2pq = one_over_2pq;
369 const SIMINT_DBLTYPE vrr_const_2_over_2pq = SIMINT_MUL(const_2, one_over_2pq);
370 const SIMINT_DBLTYPE vrr_const_3_over_2pq = SIMINT_MUL(const_3, one_over_2pq);
371 const SIMINT_DBLTYPE vrr_const_4_over_2pq = SIMINT_MUL(const_4, one_over_2pq);
372 const SIMINT_DBLTYPE vrr_const_5_over_2pq = SIMINT_MUL(const_5, one_over_2pq);
373 const SIMINT_DBLTYPE vrr_const_6_over_2pq = SIMINT_MUL(const_6, one_over_2pq);
374 const SIMINT_DBLTYPE vrr_const_7_over_2pq = SIMINT_MUL(const_7, one_over_2pq);
375 const SIMINT_DBLTYPE vrr_const_8_over_2pq = SIMINT_MUL(const_8, one_over_2pq);
376 const SIMINT_DBLTYPE vrr_const_9_over_2pq = SIMINT_MUL(const_9, one_over_2pq);
377 const SIMINT_DBLTYPE vrr_const_10_over_2pq = SIMINT_MUL(const_10, one_over_2pq);
378
379
380
381 // Forming PRIM_INT__p_s_s_s[19 * 3];
382 for(n = 0; n < 19; ++n) // loop over orders of auxiliary function
383 {
384
385 PRIM_INT__p_s_s_s[n * 3 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
386 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]);
387
388 PRIM_INT__p_s_s_s[n * 3 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
389 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]);
390
391 PRIM_INT__p_s_s_s[n * 3 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
392 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]);
393
394 }
395
396
397
398 // Forming PRIM_INT__d_s_s_s[18 * 6];
399 for(n = 0; n < 18; ++n) // loop over orders of auxiliary function
400 {
401
402 PRIM_INT__d_s_s_s[n * 6 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
403 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]);
404 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]);
405
406 PRIM_INT__d_s_s_s[n * 6 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
407 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]);
408
409 PRIM_INT__d_s_s_s[n * 6 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
410 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]);
411
412 PRIM_INT__d_s_s_s[n * 6 + 3] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
413 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]);
414 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]);
415
416 PRIM_INT__d_s_s_s[n * 6 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
417 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]);
418
419 PRIM_INT__d_s_s_s[n * 6 + 5] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
420 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]);
421 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]);
422
423 }
424
425
426
427 // Forming PRIM_INT__f_s_s_s[17 * 10];
428 for(n = 0; n < 17; ++n) // loop over orders of auxiliary function
429 {
430
431 PRIM_INT__f_s_s_s[n * 10 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
432 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]);
433 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]);
434
435 PRIM_INT__f_s_s_s[n * 10 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
436 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]);
437
438 PRIM_INT__f_s_s_s[n * 10 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
439 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]);
440
441 PRIM_INT__f_s_s_s[n * 10 + 3] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
442 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]);
443
444 PRIM_INT__f_s_s_s[n * 10 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
445 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]);
446
447 PRIM_INT__f_s_s_s[n * 10 + 5] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
448 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]);
449
450 PRIM_INT__f_s_s_s[n * 10 + 6] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
451 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]);
452 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]);
453
454 PRIM_INT__f_s_s_s[n * 10 + 7] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
455 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]);
456
457 PRIM_INT__f_s_s_s[n * 10 + 8] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
458 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]);
459
460 PRIM_INT__f_s_s_s[n * 10 + 9] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
461 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]);
462 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]);
463
464 }
465
466
467 VRR_I_g_s_s_s(
468 PRIM_INT__g_s_s_s,
469 PRIM_INT__f_s_s_s,
470 PRIM_INT__d_s_s_s,
471 P_PA,
472 a_over_p,
473 aop_PQ,
474 one_over_2p,
475 16);
476
477
478 VRR_I_h_s_s_s(
479 PRIM_INT__h_s_s_s,
480 PRIM_INT__g_s_s_s,
481 PRIM_INT__f_s_s_s,
482 P_PA,
483 a_over_p,
484 aop_PQ,
485 one_over_2p,
486 15);
487
488
489 ostei_general_vrr1_I(6, 14,
490 one_over_2p, a_over_p, aop_PQ, P_PA,
491 PRIM_INT__h_s_s_s, PRIM_INT__g_s_s_s, PRIM_INT__i_s_s_s);
492
493
494 ostei_general_vrr1_I(7, 13,
495 one_over_2p, a_over_p, aop_PQ, P_PA,
496 PRIM_INT__i_s_s_s, PRIM_INT__h_s_s_s, PRIM_INT__k_s_s_s);
497
498
499 ostei_general_vrr_K(7, 0, 1, 0, 9,
500 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
501 PRIM_INT__k_s_s_s, NULL, NULL, PRIM_INT__i_s_s_s, NULL, PRIM_INT__k_s_p_s);
502
503
504 ostei_general_vrr_K(6, 0, 1, 0, 9,
505 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
506 PRIM_INT__i_s_s_s, NULL, NULL, PRIM_INT__h_s_s_s, NULL, PRIM_INT__i_s_p_s);
507
508
509 ostei_general_vrr_K(7, 0, 2, 0, 8,
510 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
511 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);
512
513
514 ostei_general_vrr_K(5, 0, 1, 0, 9,
515 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
516 PRIM_INT__h_s_s_s, NULL, NULL, PRIM_INT__g_s_s_s, NULL, PRIM_INT__h_s_p_s);
517
518
519 ostei_general_vrr_K(6, 0, 2, 0, 8,
520 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
521 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);
522
523
524 ostei_general_vrr_K(7, 0, 3, 0, 7,
525 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
526 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);
527
528
529 VRR_K_g_s_p_s(
530 PRIM_INT__g_s_p_s,
531 PRIM_INT__g_s_s_s,
532 PRIM_INT__f_s_s_s,
533 Q_PA,
534 aoq_PQ,
535 one_over_2pq,
536 9);
537
538
539 ostei_general_vrr_K(5, 0, 2, 0, 8,
540 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
541 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);
542
543
544 ostei_general_vrr_K(6, 0, 3, 0, 7,
545 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
546 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);
547
548
549 ostei_general_vrr_K(7, 0, 4, 0, 6,
550 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
551 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);
552
553
554 VRR_K_f_s_p_s(
555 PRIM_INT__f_s_p_s,
556 PRIM_INT__f_s_s_s,
557 PRIM_INT__d_s_s_s,
558 Q_PA,
559 aoq_PQ,
560 one_over_2pq,
561 9);
562
563
564 ostei_general_vrr_K(4, 0, 2, 0, 8,
565 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
566 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);
567
568
569 ostei_general_vrr_K(5, 0, 3, 0, 7,
570 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
571 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);
572
573
574 ostei_general_vrr_K(6, 0, 4, 0, 6,
575 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
576 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);
577
578
579 ostei_general_vrr_K(7, 0, 5, 0, 5,
580 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
581 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);
582
583
584
585 // Forming PRIM_INT__d_s_p_s[9 * 18];
586 for(n = 0; n < 9; ++n) // loop over orders of auxiliary function
587 {
588
589 PRIM_INT__d_s_p_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
590 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]);
591 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]);
592
593 PRIM_INT__d_s_p_s[n * 18 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
594 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]);
595
596 PRIM_INT__d_s_p_s[n * 18 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
597 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]);
598
599 PRIM_INT__d_s_p_s[n * 18 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 1]);
600 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]);
601 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]);
602
603 PRIM_INT__d_s_p_s[n * 18 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 1]);
604 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]);
605 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]);
606
607 PRIM_INT__d_s_p_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
608 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]);
609
610 PRIM_INT__d_s_p_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 2]);
611 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]);
612 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]);
613
614 PRIM_INT__d_s_p_s[n * 18 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 2]);
615 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]);
616
617 PRIM_INT__d_s_p_s[n * 18 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 2]);
618 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]);
619 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]);
620
621 PRIM_INT__d_s_p_s[n * 18 + 9] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
622 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]);
623
624 PRIM_INT__d_s_p_s[n * 18 + 10] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
625 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]);
626 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]);
627
628 PRIM_INT__d_s_p_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
629 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]);
630
631 PRIM_INT__d_s_p_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 4]);
632 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]);
633
634 PRIM_INT__d_s_p_s[n * 18 + 13] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 4]);
635 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]);
636 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]);
637
638 PRIM_INT__d_s_p_s[n * 18 + 14] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 4]);
639 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]);
640 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]);
641
642 PRIM_INT__d_s_p_s[n * 18 + 15] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
643 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]);
644
645 PRIM_INT__d_s_p_s[n * 18 + 16] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
646 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]);
647
648 PRIM_INT__d_s_p_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
649 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]);
650 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]);
651
652 }
653
654
655 VRR_K_f_s_d_s(
656 PRIM_INT__f_s_d_s,
657 PRIM_INT__f_s_p_s,
658 PRIM_INT__f_s_s_s,
659 PRIM_INT__d_s_p_s,
660 Q_PA,
661 a_over_q,
662 aoq_PQ,
663 one_over_2pq,
664 one_over_2q,
665 8);
666
667
668 ostei_general_vrr_K(4, 0, 3, 0, 7,
669 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
670 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);
671
672
673 ostei_general_vrr_K(5, 0, 4, 0, 6,
674 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
675 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);
676
677
678 ostei_general_vrr_K(6, 0, 5, 0, 5,
679 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
680 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);
681
682
683 ostei_general_vrr_K(7, 0, 6, 0, 4,
684 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
685 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);
686
687
688
689 // Forming PRIM_INT__p_s_p_s[9 * 9];
690 for(n = 0; n < 9; ++n) // loop over orders of auxiliary function
691 {
692
693 PRIM_INT__p_s_p_s[n * 9 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
694 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]);
695 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]);
696
697 PRIM_INT__p_s_p_s[n * 9 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
698 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]);
699
700 PRIM_INT__p_s_p_s[n * 9 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
701 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]);
702
703 PRIM_INT__p_s_p_s[n * 9 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 1]);
704 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]);
705
706 PRIM_INT__p_s_p_s[n * 9 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
707 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]);
708 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]);
709
710 PRIM_INT__p_s_p_s[n * 9 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
711 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]);
712
713 PRIM_INT__p_s_p_s[n * 9 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 2]);
714 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]);
715
716 PRIM_INT__p_s_p_s[n * 9 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 2]);
717 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]);
718
719 PRIM_INT__p_s_p_s[n * 9 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
720 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]);
721 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]);
722
723 }
724
725
726 VRR_K_d_s_d_s(
727 PRIM_INT__d_s_d_s,
728 PRIM_INT__d_s_p_s,
729 PRIM_INT__d_s_s_s,
730 PRIM_INT__p_s_p_s,
731 Q_PA,
732 a_over_q,
733 aoq_PQ,
734 one_over_2pq,
735 one_over_2q,
736 8);
737
738
739 ostei_general_vrr_K(3, 0, 3, 0, 7,
740 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
741 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);
742
743
744 ostei_general_vrr_K(4, 0, 4, 0, 6,
745 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
746 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);
747
748
749 ostei_general_vrr_K(5, 0, 5, 0, 5,
750 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
751 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);
752
753
754 ostei_general_vrr_K(6, 0, 6, 0, 4,
755 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
756 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);
757
758
759 ostei_general_vrr_K(7, 0, 7, 0, 3,
760 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
761 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);
762
763
764
765 // Forming PRIM_INT__s_s_p_s[9 * 3];
766 for(n = 0; n < 9; ++n) // loop over orders of auxiliary function
767 {
768
769 PRIM_INT__s_s_p_s[n * 3 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
770 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]);
771
772 PRIM_INT__s_s_p_s[n * 3 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
773 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]);
774
775 PRIM_INT__s_s_p_s[n * 3 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
776 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]);
777
778 }
779
780
781
782 // Forming PRIM_INT__p_s_d_s[8 * 18];
783 for(n = 0; n < 8; ++n) // loop over orders of auxiliary function
784 {
785
786 PRIM_INT__p_s_d_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 0]);
787 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]);
788 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]);
789 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]);
790
791 PRIM_INT__p_s_d_s[n * 18 + 3] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 1]);
792 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]);
793 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]);
794
795 PRIM_INT__p_s_d_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 2]);
796 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]);
797 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]);
798
799 PRIM_INT__p_s_d_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 3]);
800 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]);
801 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]);
802
803 PRIM_INT__p_s_d_s[n * 18 + 9] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 4]);
804 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]);
805 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]);
806 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]);
807
808 PRIM_INT__p_s_d_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 5]);
809 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]);
810 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]);
811
812 PRIM_INT__p_s_d_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_p_s[n * 9 + 6]);
813 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]);
814 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]);
815
816 PRIM_INT__p_s_d_s[n * 18 + 15] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_p_s[n * 9 + 7]);
817 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]);
818 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]);
819
820 PRIM_INT__p_s_d_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_p_s[n * 9 + 8]);
821 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]);
822 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]);
823 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]);
824
825 }
826
827
828 VRR_K_d_s_f_s(
829 PRIM_INT__d_s_f_s,
830 PRIM_INT__d_s_d_s,
831 PRIM_INT__d_s_p_s,
832 PRIM_INT__p_s_d_s,
833 Q_PA,
834 a_over_q,
835 aoq_PQ,
836 one_over_2pq,
837 one_over_2q,
838 7);
839
840
841 ostei_general_vrr_K(3, 0, 4, 0, 6,
842 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
843 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);
844
845
846 ostei_general_vrr_K(4, 0, 5, 0, 5,
847 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
848 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);
849
850
851 ostei_general_vrr_K(5, 0, 6, 0, 4,
852 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
853 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);
854
855
856 ostei_general_vrr_K(6, 0, 7, 0, 3,
857 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
858 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);
859
860
861 ostei_general_vrr_K(7, 0, 8, 0, 2,
862 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
863 PRIM_INT__k_s_k_s, PRIM_INT__k_s_i_s, NULL, PRIM_INT__i_s_k_s, NULL, PRIM_INT__k_s_l_s);
864
865
866 ostei_general_vrr1_I(8, 12,
867 one_over_2p, a_over_p, aop_PQ, P_PA,
868 PRIM_INT__k_s_s_s, PRIM_INT__i_s_s_s, PRIM_INT__l_s_s_s);
869
870
871 ostei_general_vrr_K(8, 0, 1, 0, 9,
872 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
873 PRIM_INT__l_s_s_s, NULL, NULL, PRIM_INT__k_s_s_s, NULL, PRIM_INT__l_s_p_s);
874
875
876 ostei_general_vrr_K(8, 0, 2, 0, 8,
877 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
878 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);
879
880
881 ostei_general_vrr_K(8, 0, 3, 0, 7,
882 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
883 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);
884
885
886 ostei_general_vrr_K(8, 0, 4, 0, 6,
887 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
888 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);
889
890
891 ostei_general_vrr_K(8, 0, 5, 0, 5,
892 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
893 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);
894
895
896 ostei_general_vrr_K(8, 0, 6, 0, 4,
897 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
898 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);
899
900
901 ostei_general_vrr_K(8, 0, 7, 0, 3,
902 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
903 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);
904
905
906
907 // Forming PRIM_INT__s_s_d_s[8 * 6];
908 for(n = 0; n < 8; ++n) // loop over orders of auxiliary function
909 {
910
911 PRIM_INT__s_s_d_s[n * 6 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_p_s[n * 3 + 0]);
912 PRIM_INT__s_s_d_s[n * 6 + 0] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__s_s_p_s[(n+1) * 3 + 0], PRIM_INT__s_s_d_s[n * 6 + 0]);
913 PRIM_INT__s_s_d_s[n * 6 + 0] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__s_s_d_s[n * 6 + 0]);
914
915 PRIM_INT__s_s_d_s[n * 6 + 3] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_p_s[n * 3 + 1]);
916 PRIM_INT__s_s_d_s[n * 6 + 3] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__s_s_p_s[(n+1) * 3 + 1], PRIM_INT__s_s_d_s[n * 6 + 3]);
917 PRIM_INT__s_s_d_s[n * 6 + 3] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__s_s_d_s[n * 6 + 3]);
918
919 PRIM_INT__s_s_d_s[n * 6 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_p_s[n * 3 + 2]);
920 PRIM_INT__s_s_d_s[n * 6 + 5] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__s_s_p_s[(n+1) * 3 + 2], PRIM_INT__s_s_d_s[n * 6 + 5]);
921 PRIM_INT__s_s_d_s[n * 6 + 5] = SIMINT_FMADD( vrr_const_1_over_2q, SIMINT_FMADD(a_over_q, PRIM_INT__s_s_s_s[(n+1) * 1 + 0], PRIM_INT__s_s_s_s[n * 1 + 0]), PRIM_INT__s_s_d_s[n * 6 + 5]);
922
923 }
924
925
926 VRR_K_p_s_f_s(
927 PRIM_INT__p_s_f_s,
928 PRIM_INT__p_s_d_s,
929 PRIM_INT__p_s_p_s,
930 PRIM_INT__s_s_d_s,
931 Q_PA,
932 a_over_q,
933 aoq_PQ,
934 one_over_2pq,
935 one_over_2q,
936 7);
937
938
939 ostei_general_vrr_K(2, 0, 4, 0, 6,
940 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
941 PRIM_INT__d_s_f_s, PRIM_INT__d_s_d_s, NULL, PRIM_INT__p_s_f_s, NULL, PRIM_INT__d_s_g_s);
942
943
944 ostei_general_vrr_K(3, 0, 5, 0, 5,
945 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
946 PRIM_INT__f_s_g_s, PRIM_INT__f_s_f_s, NULL, PRIM_INT__d_s_g_s, NULL, PRIM_INT__f_s_h_s);
947
948
949 ostei_general_vrr_K(4, 0, 6, 0, 4,
950 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
951 PRIM_INT__g_s_h_s, PRIM_INT__g_s_g_s, NULL, PRIM_INT__f_s_h_s, NULL, PRIM_INT__g_s_i_s);
952
953
954 ostei_general_vrr_K(5, 0, 7, 0, 3,
955 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
956 PRIM_INT__h_s_i_s, PRIM_INT__h_s_h_s, NULL, PRIM_INT__g_s_i_s, NULL, PRIM_INT__h_s_k_s);
957
958
959 ostei_general_vrr_K(6, 0, 8, 0, 2,
960 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
961 PRIM_INT__i_s_k_s, PRIM_INT__i_s_i_s, NULL, PRIM_INT__h_s_k_s, NULL, PRIM_INT__i_s_l_s);
962
963
964 ostei_general_vrr_K(7, 0, 9, 0, 1,
965 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
966 PRIM_INT__k_s_l_s, PRIM_INT__k_s_k_s, NULL, PRIM_INT__i_s_l_s, NULL, PRIM_INT__k_s_m_s);
967
968
969 ostei_general_vrr_K(8, 0, 8, 0, 2,
970 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
971 PRIM_INT__l_s_k_s, PRIM_INT__l_s_i_s, NULL, PRIM_INT__k_s_k_s, NULL, PRIM_INT__l_s_l_s);
972
973
974 ostei_general_vrr1_I(9, 11,
975 one_over_2p, a_over_p, aop_PQ, P_PA,
976 PRIM_INT__l_s_s_s, PRIM_INT__k_s_s_s, PRIM_INT__m_s_s_s);
977
978
979 ostei_general_vrr_K(9, 0, 1, 0, 9,
980 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
981 PRIM_INT__m_s_s_s, NULL, NULL, PRIM_INT__l_s_s_s, NULL, PRIM_INT__m_s_p_s);
982
983
984 ostei_general_vrr_K(9, 0, 2, 0, 8,
985 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
986 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);
987
988
989 ostei_general_vrr_K(9, 0, 3, 0, 7,
990 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
991 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);
992
993
994 ostei_general_vrr_K(9, 0, 4, 0, 6,
995 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
996 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);
997
998
999 ostei_general_vrr_K(9, 0, 5, 0, 5,
1000 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1001 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);
1002
1003
1004 ostei_general_vrr_K(9, 0, 6, 0, 4,
1005 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1006 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);
1007
1008
1009 ostei_general_vrr_K(9, 0, 7, 0, 3,
1010 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1011 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);
1012
1013
1014 ostei_general_vrr_K(8, 0, 9, 0, 1,
1015 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1016 PRIM_INT__l_s_l_s, PRIM_INT__l_s_k_s, NULL, PRIM_INT__k_s_l_s, NULL, PRIM_INT__l_s_m_s);
1017
1018
1019 ostei_general_vrr_K(9, 0, 8, 0, 2,
1020 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1021 PRIM_INT__m_s_k_s, PRIM_INT__m_s_i_s, NULL, PRIM_INT__l_s_k_s, NULL, PRIM_INT__m_s_l_s);
1022
1023
1024 ostei_general_vrr1_I(10, 10,
1025 one_over_2p, a_over_p, aop_PQ, P_PA,
1026 PRIM_INT__m_s_s_s, PRIM_INT__l_s_s_s, PRIM_INT__n_s_s_s);
1027
1028
1029 ostei_general_vrr_K(10, 0, 1, 0, 9,
1030 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1031 PRIM_INT__n_s_s_s, NULL, NULL, PRIM_INT__m_s_s_s, NULL, PRIM_INT__n_s_p_s);
1032
1033
1034 ostei_general_vrr_K(10, 0, 2, 0, 8,
1035 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1036 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);
1037
1038
1039 ostei_general_vrr_K(10, 0, 3, 0, 7,
1040 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1041 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);
1042
1043
1044 ostei_general_vrr_K(10, 0, 4, 0, 6,
1045 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1046 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);
1047
1048
1049 ostei_general_vrr_K(10, 0, 5, 0, 5,
1050 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1051 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);
1052
1053
1054 ostei_general_vrr_K(10, 0, 6, 0, 4,
1055 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1056 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);
1057
1058
1059 ostei_general_vrr_K(10, 0, 7, 0, 3,
1060 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1061 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);
1062
1063
1064 ostei_general_vrr_K(9, 0, 9, 0, 1,
1065 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1066 PRIM_INT__m_s_l_s, PRIM_INT__m_s_k_s, NULL, PRIM_INT__l_s_l_s, NULL, PRIM_INT__m_s_m_s);
1067
1068
1069 ostei_general_vrr_K(10, 0, 8, 0, 2,
1070 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1071 PRIM_INT__n_s_k_s, PRIM_INT__n_s_i_s, NULL, PRIM_INT__m_s_k_s, NULL, PRIM_INT__n_s_l_s);
1072
1073
1074 ostei_general_vrr_K(10, 0, 9, 0, 1,
1075 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
1076 PRIM_INT__n_s_l_s, PRIM_INT__n_s_k_s, NULL, PRIM_INT__m_s_l_s, NULL, PRIM_INT__n_s_m_s);
1077
1078
1079
1080
1081 ////////////////////////////////////
1082 // Accumulate contracted integrals
1083 ////////////////////////////////////
1084 if(lastoffset == 0)
1085 {
1086 contract_all(1296, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
1087 contract_all(1620, PRIM_INT__k_s_l_s, PRIM_PTR_INT__k_s_l_s);
1088 contract_all(1980, PRIM_INT__k_s_m_s, PRIM_PTR_INT__k_s_m_s);
1089 contract_all(1620, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
1090 contract_all(2025, PRIM_INT__l_s_l_s, PRIM_PTR_INT__l_s_l_s);
1091 contract_all(2475, PRIM_INT__l_s_m_s, PRIM_PTR_INT__l_s_m_s);
1092 contract_all(1980, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
1093 contract_all(2475, PRIM_INT__m_s_l_s, PRIM_PTR_INT__m_s_l_s);
1094 contract_all(3025, PRIM_INT__m_s_m_s, PRIM_PTR_INT__m_s_m_s);
1095 contract_all(2376, PRIM_INT__n_s_k_s, PRIM_PTR_INT__n_s_k_s);
1096 contract_all(2970, PRIM_INT__n_s_l_s, PRIM_PTR_INT__n_s_l_s);
1097 contract_all(3630, PRIM_INT__n_s_m_s, PRIM_PTR_INT__n_s_m_s);
1098 }
1099 else
1100 {
1101 contract(1296, shelloffsets, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
1102 contract(1620, shelloffsets, PRIM_INT__k_s_l_s, PRIM_PTR_INT__k_s_l_s);
1103 contract(1980, shelloffsets, PRIM_INT__k_s_m_s, PRIM_PTR_INT__k_s_m_s);
1104 contract(1620, shelloffsets, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
1105 contract(2025, shelloffsets, PRIM_INT__l_s_l_s, PRIM_PTR_INT__l_s_l_s);
1106 contract(2475, shelloffsets, PRIM_INT__l_s_m_s, PRIM_PTR_INT__l_s_m_s);
1107 contract(1980, shelloffsets, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
1108 contract(2475, shelloffsets, PRIM_INT__m_s_l_s, PRIM_PTR_INT__m_s_l_s);
1109 contract(3025, shelloffsets, PRIM_INT__m_s_m_s, PRIM_PTR_INT__m_s_m_s);
1110 contract(2376, shelloffsets, PRIM_INT__n_s_k_s, PRIM_PTR_INT__n_s_k_s);
1111 contract(2970, shelloffsets, PRIM_INT__n_s_l_s, PRIM_PTR_INT__n_s_l_s);
1112 contract(3630, shelloffsets, PRIM_INT__n_s_m_s, PRIM_PTR_INT__n_s_m_s);
1113 PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
1114 PRIM_PTR_INT__k_s_l_s += lastoffset*1620;
1115 PRIM_PTR_INT__k_s_m_s += lastoffset*1980;
1116 PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
1117 PRIM_PTR_INT__l_s_l_s += lastoffset*2025;
1118 PRIM_PTR_INT__l_s_m_s += lastoffset*2475;
1119 PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
1120 PRIM_PTR_INT__m_s_l_s += lastoffset*2475;
1121 PRIM_PTR_INT__m_s_m_s += lastoffset*3025;
1122 PRIM_PTR_INT__n_s_k_s += lastoffset*2376;
1123 PRIM_PTR_INT__n_s_l_s += lastoffset*2970;
1124 PRIM_PTR_INT__n_s_m_s += lastoffset*3630;
1125 }
1126
1127 } // close loop over j
1128 } // close loop over i
1129
1130 //Advance to the next batch
1131 jstart = SIMINT_SIMD_ROUND(jend);
1132
1133 //////////////////////////////////////////////
1134 // Contracted integrals: Horizontal recurrance
1135 //////////////////////////////////////////////
1136
1137
1138 const double hAB[3] = { P.AB_x[ab], P.AB_y[ab], P.AB_z[ab] };
1139
1140
1141 for(abcd = 0; abcd < nshellbatch; ++abcd, ++real_abcd)
1142 {
1143 const double hCD[3] = { Q.AB_x[cd+abcd], Q.AB_y[cd+abcd], Q.AB_z[cd+abcd] };
1144
1145 // set up HRR pointers
1146 double const * restrict HRR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
1147 double const * restrict HRR_INT__k_s_l_s = INT__k_s_l_s + abcd * 1620;
1148 double const * restrict HRR_INT__k_s_m_s = INT__k_s_m_s + abcd * 1980;
1149 double const * restrict HRR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
1150 double const * restrict HRR_INT__l_s_l_s = INT__l_s_l_s + abcd * 2025;
1151 double const * restrict HRR_INT__l_s_m_s = INT__l_s_m_s + abcd * 2475;
1152 double const * restrict HRR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
1153 double const * restrict HRR_INT__m_s_l_s = INT__m_s_l_s + abcd * 2475;
1154 double const * restrict HRR_INT__m_s_m_s = INT__m_s_m_s + abcd * 3025;
1155 double const * restrict HRR_INT__n_s_k_s = INT__n_s_k_s + abcd * 2376;
1156 double const * restrict HRR_INT__n_s_l_s = INT__n_s_l_s + abcd * 2970;
1157 double const * restrict HRR_INT__n_s_m_s = INT__n_s_m_s + abcd * 3630;
1158 double * restrict HRR_INT__k_f_k_d = INT__k_f_k_d + real_abcd * 77760;
1159
1160 // form INT__k_p_k_s
1161 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);
1162
1163 // form INT__k_p_l_s
1164 ostei_general_hrr_J(7, 1, 8, 0, hAB, HRR_INT__l_s_l_s, HRR_INT__k_s_l_s, HRR_INT__k_p_l_s);
1165
1166 // form INT__k_p_m_s
1167 ostei_general_hrr_J(7, 1, 9, 0, hAB, HRR_INT__l_s_m_s, HRR_INT__k_s_m_s, HRR_INT__k_p_m_s);
1168
1169 // form INT__l_p_k_s
1170 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);
1171
1172 // form INT__l_p_l_s
1173 ostei_general_hrr_J(8, 1, 8, 0, hAB, HRR_INT__m_s_l_s, HRR_INT__l_s_l_s, HRR_INT__l_p_l_s);
1174
1175 // form INT__l_p_m_s
1176 ostei_general_hrr_J(8, 1, 9, 0, hAB, HRR_INT__m_s_m_s, HRR_INT__l_s_m_s, HRR_INT__l_p_m_s);
1177
1178 // form INT__m_p_k_s
1179 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);
1180
1181 // form INT__m_p_l_s
1182 ostei_general_hrr_J(9, 1, 8, 0, hAB, HRR_INT__n_s_l_s, HRR_INT__m_s_l_s, HRR_INT__m_p_l_s);
1183
1184 // form INT__m_p_m_s
1185 ostei_general_hrr_J(9, 1, 9, 0, hAB, HRR_INT__n_s_m_s, HRR_INT__m_s_m_s, HRR_INT__m_p_m_s);
1186
1187 // form INT__k_d_k_s
1188 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);
1189
1190 // form INT__k_d_l_s
1191 ostei_general_hrr_J(7, 2, 8, 0, hAB, HRR_INT__l_p_l_s, HRR_INT__k_p_l_s, HRR_INT__k_d_l_s);
1192
1193 // form INT__k_d_m_s
1194 ostei_general_hrr_J(7, 2, 9, 0, hAB, HRR_INT__l_p_m_s, HRR_INT__k_p_m_s, HRR_INT__k_d_m_s);
1195
1196 // form INT__l_d_k_s
1197 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);
1198
1199 // form INT__l_d_l_s
1200 ostei_general_hrr_J(8, 2, 8, 0, hAB, HRR_INT__m_p_l_s, HRR_INT__l_p_l_s, HRR_INT__l_d_l_s);
1201
1202 // form INT__l_d_m_s
1203 ostei_general_hrr_J(8, 2, 9, 0, hAB, HRR_INT__m_p_m_s, HRR_INT__l_p_m_s, HRR_INT__l_d_m_s);
1204
1205 // form INT__k_f_k_s
1206 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);
1207
1208 // form INT__k_f_l_s
1209 ostei_general_hrr_J(7, 3, 8, 0, hAB, HRR_INT__l_d_l_s, HRR_INT__k_d_l_s, HRR_INT__k_f_l_s);
1210
1211 // form INT__k_f_m_s
1212 ostei_general_hrr_J(7, 3, 9, 0, hAB, HRR_INT__l_d_m_s, HRR_INT__k_d_m_s, HRR_INT__k_f_m_s);
1213
1214 // form INT__k_f_k_p
1215 ostei_general_hrr_L(7, 3, 7, 1, hCD, HRR_INT__k_f_l_s, HRR_INT__k_f_k_s, HRR_INT__k_f_k_p);
1216
1217 // form INT__k_f_l_p
1218 ostei_general_hrr_L(7, 3, 8, 1, hCD, HRR_INT__k_f_m_s, HRR_INT__k_f_l_s, HRR_INT__k_f_l_p);
1219
1220 // form INT__k_f_k_d
1221 ostei_general_hrr_L(7, 3, 7, 2, hCD, HRR_INT__k_f_l_p, HRR_INT__k_f_k_p, HRR_INT__k_f_k_d);
1222
1223
1224 } // close HRR loop
1225
1226
1227 } // close loop cdbatch
1228
1229 istart = iend;
1230 } // close loop over ab
1231
1232 return P.nshell12_clip * Q.nshell12_clip;
1233 }
1234
ostei_f_k_k_d(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__f_k_k_d)1235 int ostei_f_k_k_d(struct simint_multi_shellpair const P,
1236 struct simint_multi_shellpair const Q,
1237 double screen_tol,
1238 double * const restrict work,
1239 double * const restrict INT__f_k_k_d)
1240 {
1241 double P_AB[3*P.nshell12];
1242 struct simint_multi_shellpair P_tmp = P;
1243 P_tmp.PA_x = P.PB_x; P_tmp.PA_y = P.PB_y; P_tmp.PA_z = P.PB_z;
1244 P_tmp.PB_x = P.PA_x; P_tmp.PB_y = P.PA_y; P_tmp.PB_z = P.PA_z;
1245 P_tmp.AB_x = P_AB;
1246 P_tmp.AB_y = P_AB + P.nshell12;
1247 P_tmp.AB_z = P_AB + 2*P.nshell12;
1248
1249 for(int i = 0; i < P.nshell12; i++)
1250 {
1251 P_tmp.AB_x[i] = -P.AB_x[i];
1252 P_tmp.AB_y[i] = -P.AB_y[i];
1253 P_tmp.AB_z[i] = -P.AB_z[i];
1254 }
1255
1256 int ret = ostei_k_f_k_d(P_tmp, Q, screen_tol, work, INT__f_k_k_d);
1257 double buffer[77760] SIMINT_ALIGN_ARRAY_DBL;
1258
1259 for(int q = 0; q < ret; q++)
1260 {
1261 int idx = 0;
1262 for(int a = 0; a < 10; ++a)
1263 for(int b = 0; b < 36; ++b)
1264 for(int c = 0; c < 36; ++c)
1265 for(int d = 0; d < 6; ++d)
1266 buffer[idx++] = INT__f_k_k_d[q*77760+b*2160+a*216+c*6+d];
1267
1268 memcpy(INT__f_k_k_d+q*77760, buffer, 77760*sizeof(double));
1269 }
1270
1271 return ret;
1272 }
1273
ostei_k_f_d_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_f_d_k)1274 int ostei_k_f_d_k(struct simint_multi_shellpair const P,
1275 struct simint_multi_shellpair const Q,
1276 double screen_tol,
1277 double * const restrict work,
1278 double * const restrict INT__k_f_d_k)
1279 {
1280 double Q_AB[3*Q.nshell12];
1281 struct simint_multi_shellpair Q_tmp = Q;
1282 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1283 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1284 Q_tmp.AB_x = Q_AB;
1285 Q_tmp.AB_y = Q_AB + Q.nshell12;
1286 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1287
1288 for(int i = 0; i < Q.nshell12; i++)
1289 {
1290 Q_tmp.AB_x[i] = -Q.AB_x[i];
1291 Q_tmp.AB_y[i] = -Q.AB_y[i];
1292 Q_tmp.AB_z[i] = -Q.AB_z[i];
1293 }
1294
1295 int ret = ostei_k_f_k_d(P, Q_tmp, screen_tol, work, INT__k_f_d_k);
1296 double buffer[77760] SIMINT_ALIGN_ARRAY_DBL;
1297
1298 for(int q = 0; q < ret; q++)
1299 {
1300 int idx = 0;
1301 for(int a = 0; a < 36; ++a)
1302 for(int b = 0; b < 10; ++b)
1303 for(int c = 0; c < 6; ++c)
1304 for(int d = 0; d < 36; ++d)
1305 buffer[idx++] = INT__k_f_d_k[q*77760+a*2160+b*216+d*6+c];
1306
1307 memcpy(INT__k_f_d_k+q*77760, buffer, 77760*sizeof(double));
1308 }
1309
1310 return ret;
1311 }
1312
ostei_f_k_d_k(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__f_k_d_k)1313 int ostei_f_k_d_k(struct simint_multi_shellpair const P,
1314 struct simint_multi_shellpair const Q,
1315 double screen_tol,
1316 double * const restrict work,
1317 double * const restrict INT__f_k_d_k)
1318 {
1319 double P_AB[3*P.nshell12];
1320 struct simint_multi_shellpair P_tmp = P;
1321 P_tmp.PA_x = P.PB_x; P_tmp.PA_y = P.PB_y; P_tmp.PA_z = P.PB_z;
1322 P_tmp.PB_x = P.PA_x; P_tmp.PB_y = P.PA_y; P_tmp.PB_z = P.PA_z;
1323 P_tmp.AB_x = P_AB;
1324 P_tmp.AB_y = P_AB + P.nshell12;
1325 P_tmp.AB_z = P_AB + 2*P.nshell12;
1326
1327 for(int i = 0; i < P.nshell12; i++)
1328 {
1329 P_tmp.AB_x[i] = -P.AB_x[i];
1330 P_tmp.AB_y[i] = -P.AB_y[i];
1331 P_tmp.AB_z[i] = -P.AB_z[i];
1332 }
1333
1334 double Q_AB[3*Q.nshell12];
1335 struct simint_multi_shellpair Q_tmp = Q;
1336 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1337 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1338 Q_tmp.AB_x = Q_AB;
1339 Q_tmp.AB_y = Q_AB + Q.nshell12;
1340 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1341
1342 for(int i = 0; i < Q.nshell12; i++)
1343 {
1344 Q_tmp.AB_x[i] = -Q.AB_x[i];
1345 Q_tmp.AB_y[i] = -Q.AB_y[i];
1346 Q_tmp.AB_z[i] = -Q.AB_z[i];
1347 }
1348
1349 int ret = ostei_k_f_k_d(P_tmp, Q_tmp, screen_tol, work, INT__f_k_d_k);
1350 double buffer[77760] SIMINT_ALIGN_ARRAY_DBL;
1351
1352 for(int q = 0; q < ret; q++)
1353 {
1354 int idx = 0;
1355 for(int a = 0; a < 10; ++a)
1356 for(int b = 0; b < 36; ++b)
1357 for(int c = 0; c < 6; ++c)
1358 for(int d = 0; d < 36; ++d)
1359 buffer[idx++] = INT__f_k_d_k[q*77760+b*2160+a*216+d*6+c];
1360
1361 memcpy(INT__f_k_d_k+q*77760, buffer, 77760*sizeof(double));
1362 }
1363
1364 return ret;
1365 }
1366
1367