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