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_d_d_i_h(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__d_d_i_h)8 int ostei_d_d_i_h(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__d_d_i_h)
13 {
14
15 SIMINT_ASSUME_ALIGN_DBL(work);
16 SIMINT_ASSUME_ALIGN_DBL(INT__d_d_i_h);
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__d_s_i_s = work + (SIMINT_NSHELL_SIMD * 0);
30 double * const INT__d_s_k_s = work + (SIMINT_NSHELL_SIMD * 168);
31 double * const INT__d_s_l_s = work + (SIMINT_NSHELL_SIMD * 384);
32 double * const INT__d_s_m_s = work + (SIMINT_NSHELL_SIMD * 654);
33 double * const INT__d_s_n_s = work + (SIMINT_NSHELL_SIMD * 984);
34 double * const INT__d_s_o_s = work + (SIMINT_NSHELL_SIMD * 1380);
35 double * const INT__f_s_i_s = work + (SIMINT_NSHELL_SIMD * 1848);
36 double * const INT__f_s_k_s = work + (SIMINT_NSHELL_SIMD * 2128);
37 double * const INT__f_s_l_s = work + (SIMINT_NSHELL_SIMD * 2488);
38 double * const INT__f_s_m_s = work + (SIMINT_NSHELL_SIMD * 2938);
39 double * const INT__f_s_n_s = work + (SIMINT_NSHELL_SIMD * 3488);
40 double * const INT__f_s_o_s = work + (SIMINT_NSHELL_SIMD * 4148);
41 double * const INT__g_s_i_s = work + (SIMINT_NSHELL_SIMD * 4928);
42 double * const INT__g_s_k_s = work + (SIMINT_NSHELL_SIMD * 5348);
43 double * const INT__g_s_l_s = work + (SIMINT_NSHELL_SIMD * 5888);
44 double * const INT__g_s_m_s = work + (SIMINT_NSHELL_SIMD * 6563);
45 double * const INT__g_s_n_s = work + (SIMINT_NSHELL_SIMD * 7388);
46 double * const INT__g_s_o_s = work + (SIMINT_NSHELL_SIMD * 8378);
47 SIMINT_DBLTYPE * const primwork = (SIMINT_DBLTYPE *)(work + SIMINT_NSHELL_SIMD*9548);
48 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_s_s = primwork + 0;
49 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_p_s = primwork + 16;
50 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_d_s = primwork + 61;
51 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_f_s = primwork + 145;
52 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_g_s = primwork + 275;
53 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_h_s = primwork + 455;
54 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_i_s = primwork + 686;
55 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_k_s = primwork + 966;
56 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_l_s = primwork + 1290;
57 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_m_s = primwork + 1650;
58 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_n_s = primwork + 2035;
59 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_o_s = primwork + 2431;
60 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_f_s = primwork + 2821;
61 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_g_s = primwork + 2941;
62 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_h_s = primwork + 3121;
63 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_i_s = primwork + 3373;
64 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_k_s = primwork + 3709;
65 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_l_s = primwork + 4141;
66 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_m_s = primwork + 4681;
67 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_n_s = primwork + 5341;
68 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_o_s = primwork + 6133;
69 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_g_s = primwork + 7069;
70 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_h_s = primwork + 7339;
71 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_i_s = primwork + 7717;
72 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_k_s = primwork + 8221;
73 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_l_s = primwork + 8869;
74 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_m_s = primwork + 9679;
75 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_n_s = primwork + 10669;
76 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_o_s = primwork + 11857;
77 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_h_s = primwork + 13261;
78 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_i_s = primwork + 13681;
79 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_k_s = primwork + 14241;
80 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_l_s = primwork + 14961;
81 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_m_s = primwork + 15861;
82 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_n_s = primwork + 16961;
83 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_o_s = primwork + 18281;
84 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_i_s = primwork + 19841;
85 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_k_s = primwork + 20261;
86 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_l_s = primwork + 20801;
87 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_m_s = primwork + 21476;
88 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_n_s = primwork + 22301;
89 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_o_s = primwork + 23291;
90 double * const hrrwork = (double *)(primwork + 24461);
91 double * const HRR_INT__d_p_i_s = hrrwork + 0;
92 double * const HRR_INT__d_p_k_s = hrrwork + 504;
93 double * const HRR_INT__d_p_l_s = hrrwork + 1152;
94 double * const HRR_INT__d_p_m_s = hrrwork + 1962;
95 double * const HRR_INT__d_p_n_s = hrrwork + 2952;
96 double * const HRR_INT__d_p_o_s = hrrwork + 4140;
97 double * const HRR_INT__d_d_i_s = hrrwork + 5544;
98 double * const HRR_INT__d_d_i_p = hrrwork + 6552;
99 double * const HRR_INT__d_d_i_d = hrrwork + 9576;
100 double * const HRR_INT__d_d_i_f = hrrwork + 15624;
101 double * const HRR_INT__d_d_i_g = hrrwork + 25704;
102 double * const HRR_INT__d_d_k_s = hrrwork + 40824;
103 double * const HRR_INT__d_d_k_p = hrrwork + 42120;
104 double * const HRR_INT__d_d_k_d = hrrwork + 46008;
105 double * const HRR_INT__d_d_k_f = hrrwork + 53784;
106 double * const HRR_INT__d_d_k_g = hrrwork + 66744;
107 double * const HRR_INT__d_d_l_s = hrrwork + 86184;
108 double * const HRR_INT__d_d_l_p = hrrwork + 87804;
109 double * const HRR_INT__d_d_l_d = hrrwork + 92664;
110 double * const HRR_INT__d_d_l_f = hrrwork + 102384;
111 double * const HRR_INT__d_d_m_s = hrrwork + 118584;
112 double * const HRR_INT__d_d_m_p = hrrwork + 120564;
113 double * const HRR_INT__d_d_m_d = hrrwork + 126504;
114 double * const HRR_INT__d_d_n_s = hrrwork + 138384;
115 double * const HRR_INT__d_d_n_p = hrrwork + 140760;
116 double * const HRR_INT__d_d_o_s = hrrwork + 147888;
117 double * const HRR_INT__f_p_i_s = hrrwork + 150696;
118 double * const HRR_INT__f_p_k_s = hrrwork + 151536;
119 double * const HRR_INT__f_p_l_s = hrrwork + 152616;
120 double * const HRR_INT__f_p_m_s = hrrwork + 153966;
121 double * const HRR_INT__f_p_n_s = hrrwork + 155616;
122 double * const HRR_INT__f_p_o_s = hrrwork + 157596;
123
124
125 // Create constants
126 const SIMINT_DBLTYPE const_1 = SIMINT_DBLSET1(1);
127 const SIMINT_DBLTYPE const_10 = SIMINT_DBLSET1(10);
128 const SIMINT_DBLTYPE const_11 = SIMINT_DBLSET1(11);
129 const SIMINT_DBLTYPE const_2 = SIMINT_DBLSET1(2);
130 const SIMINT_DBLTYPE const_3 = SIMINT_DBLSET1(3);
131 const SIMINT_DBLTYPE const_4 = SIMINT_DBLSET1(4);
132 const SIMINT_DBLTYPE const_5 = SIMINT_DBLSET1(5);
133 const SIMINT_DBLTYPE const_6 = SIMINT_DBLSET1(6);
134 const SIMINT_DBLTYPE const_7 = SIMINT_DBLSET1(7);
135 const SIMINT_DBLTYPE const_8 = SIMINT_DBLSET1(8);
136 const SIMINT_DBLTYPE const_9 = SIMINT_DBLSET1(9);
137 const SIMINT_DBLTYPE one_half = SIMINT_DBLSET1(0.5);
138
139
140 ////////////////////////////////////////
141 // Loop over shells and primitives
142 ////////////////////////////////////////
143
144 real_abcd = 0;
145 istart = 0;
146 for(ab = 0; ab < P.nshell12_clip; ++ab)
147 {
148 const int iend = istart + P.nprim12[ab];
149
150 cd = 0;
151 jstart = 0;
152
153 for(cd = 0; cd < Q.nshell12_clip; cd += SIMINT_NSHELL_SIMD)
154 {
155 const int nshellbatch = ((cd + SIMINT_NSHELL_SIMD) > Q.nshell12_clip) ? Q.nshell12_clip - cd : SIMINT_NSHELL_SIMD;
156 int jend = jstart;
157 for(i = 0; i < nshellbatch; i++)
158 jend += Q.nprim12[cd+i];
159
160 // Clear the beginning of the workspace (where we are accumulating integrals)
161 memset(work, 0, SIMINT_NSHELL_SIMD * 9548 * sizeof(double));
162 abcd = 0;
163
164
165 for(i = istart; i < iend; ++i)
166 {
167 SIMINT_DBLTYPE bra_screen_max; // only used if check_screen
168
169 if(check_screen)
170 {
171 // Skip this whole thing if always insignificant
172 if((P.screen[i] * Q.screen_max) < screen_tol)
173 continue;
174 bra_screen_max = SIMINT_DBLSET1(P.screen[i]);
175 }
176
177 icd = 0;
178 iprimcd = 0;
179 nprim_icd = Q.nprim12[cd];
180 double * restrict PRIM_PTR_INT__d_s_i_s = INT__d_s_i_s + abcd * 168;
181 double * restrict PRIM_PTR_INT__d_s_k_s = INT__d_s_k_s + abcd * 216;
182 double * restrict PRIM_PTR_INT__d_s_l_s = INT__d_s_l_s + abcd * 270;
183 double * restrict PRIM_PTR_INT__d_s_m_s = INT__d_s_m_s + abcd * 330;
184 double * restrict PRIM_PTR_INT__d_s_n_s = INT__d_s_n_s + abcd * 396;
185 double * restrict PRIM_PTR_INT__d_s_o_s = INT__d_s_o_s + abcd * 468;
186 double * restrict PRIM_PTR_INT__f_s_i_s = INT__f_s_i_s + abcd * 280;
187 double * restrict PRIM_PTR_INT__f_s_k_s = INT__f_s_k_s + abcd * 360;
188 double * restrict PRIM_PTR_INT__f_s_l_s = INT__f_s_l_s + abcd * 450;
189 double * restrict PRIM_PTR_INT__f_s_m_s = INT__f_s_m_s + abcd * 550;
190 double * restrict PRIM_PTR_INT__f_s_n_s = INT__f_s_n_s + abcd * 660;
191 double * restrict PRIM_PTR_INT__f_s_o_s = INT__f_s_o_s + abcd * 780;
192 double * restrict PRIM_PTR_INT__g_s_i_s = INT__g_s_i_s + abcd * 420;
193 double * restrict PRIM_PTR_INT__g_s_k_s = INT__g_s_k_s + abcd * 540;
194 double * restrict PRIM_PTR_INT__g_s_l_s = INT__g_s_l_s + abcd * 675;
195 double * restrict PRIM_PTR_INT__g_s_m_s = INT__g_s_m_s + abcd * 825;
196 double * restrict PRIM_PTR_INT__g_s_n_s = INT__g_s_n_s + abcd * 990;
197 double * restrict PRIM_PTR_INT__g_s_o_s = INT__g_s_o_s + abcd * 1170;
198
199
200
201 // Load these one per loop over i
202 const SIMINT_DBLTYPE P_alpha = SIMINT_DBLSET1(P.alpha[i]);
203 const SIMINT_DBLTYPE P_prefac = SIMINT_DBLSET1(P.prefac[i]);
204 const SIMINT_DBLTYPE Pxyz[3] = { SIMINT_DBLSET1(P.x[i]), SIMINT_DBLSET1(P.y[i]), SIMINT_DBLSET1(P.z[i]) };
205
206 const SIMINT_DBLTYPE P_PA[3] = { SIMINT_DBLSET1(P.PA_x[i]), SIMINT_DBLSET1(P.PA_y[i]), SIMINT_DBLSET1(P.PA_z[i]) };
207
208 for(j = jstart; j < jend; j += SIMINT_SIMD_LEN)
209 {
210 // calculate the shell offsets
211 // these are the offset from the shell pointed to by cd
212 // for each element
213 int shelloffsets[SIMINT_SIMD_LEN] = {0};
214 int lastoffset = 0;
215 const int nlane = ( ((j + SIMINT_SIMD_LEN) < jend) ? SIMINT_SIMD_LEN : (jend - j));
216
217 if((iprimcd + SIMINT_SIMD_LEN) >= nprim_icd)
218 {
219 // Handle if the first element of the vector is a new shell
220 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
221 {
222 nprim_icd += Q.nprim12[cd + (++icd)];
223 PRIM_PTR_INT__d_s_i_s += 168;
224 PRIM_PTR_INT__d_s_k_s += 216;
225 PRIM_PTR_INT__d_s_l_s += 270;
226 PRIM_PTR_INT__d_s_m_s += 330;
227 PRIM_PTR_INT__d_s_n_s += 396;
228 PRIM_PTR_INT__d_s_o_s += 468;
229 PRIM_PTR_INT__f_s_i_s += 280;
230 PRIM_PTR_INT__f_s_k_s += 360;
231 PRIM_PTR_INT__f_s_l_s += 450;
232 PRIM_PTR_INT__f_s_m_s += 550;
233 PRIM_PTR_INT__f_s_n_s += 660;
234 PRIM_PTR_INT__f_s_o_s += 780;
235 PRIM_PTR_INT__g_s_i_s += 420;
236 PRIM_PTR_INT__g_s_k_s += 540;
237 PRIM_PTR_INT__g_s_l_s += 675;
238 PRIM_PTR_INT__g_s_m_s += 825;
239 PRIM_PTR_INT__g_s_n_s += 990;
240 PRIM_PTR_INT__g_s_o_s += 1170;
241 }
242 iprimcd++;
243 for(n = 1; n < SIMINT_SIMD_LEN; ++n)
244 {
245 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
246 {
247 shelloffsets[n] = shelloffsets[n-1] + 1;
248 lastoffset++;
249 nprim_icd += Q.nprim12[cd + (++icd)];
250 }
251 else
252 shelloffsets[n] = shelloffsets[n-1];
253 iprimcd++;
254 }
255 }
256 else
257 iprimcd += SIMINT_SIMD_LEN;
258
259 // Do we have to compute this vector (or has it been screened out)?
260 // (not_screened != 0 means we have to do this vector)
261 if(check_screen)
262 {
263 const double vmax = vector_max(SIMINT_MUL(bra_screen_max, SIMINT_DBLLOAD(Q.screen, j)));
264 if(vmax < screen_tol)
265 {
266 PRIM_PTR_INT__d_s_i_s += lastoffset*168;
267 PRIM_PTR_INT__d_s_k_s += lastoffset*216;
268 PRIM_PTR_INT__d_s_l_s += lastoffset*270;
269 PRIM_PTR_INT__d_s_m_s += lastoffset*330;
270 PRIM_PTR_INT__d_s_n_s += lastoffset*396;
271 PRIM_PTR_INT__d_s_o_s += lastoffset*468;
272 PRIM_PTR_INT__f_s_i_s += lastoffset*280;
273 PRIM_PTR_INT__f_s_k_s += lastoffset*360;
274 PRIM_PTR_INT__f_s_l_s += lastoffset*450;
275 PRIM_PTR_INT__f_s_m_s += lastoffset*550;
276 PRIM_PTR_INT__f_s_n_s += lastoffset*660;
277 PRIM_PTR_INT__f_s_o_s += lastoffset*780;
278 PRIM_PTR_INT__g_s_i_s += lastoffset*420;
279 PRIM_PTR_INT__g_s_k_s += lastoffset*540;
280 PRIM_PTR_INT__g_s_l_s += lastoffset*675;
281 PRIM_PTR_INT__g_s_m_s += lastoffset*825;
282 PRIM_PTR_INT__g_s_n_s += lastoffset*990;
283 PRIM_PTR_INT__g_s_o_s += lastoffset*1170;
284 continue;
285 }
286 }
287
288 const SIMINT_DBLTYPE Q_alpha = SIMINT_DBLLOAD(Q.alpha, j);
289 const SIMINT_DBLTYPE PQalpha_mul = SIMINT_MUL(P_alpha, Q_alpha);
290 const SIMINT_DBLTYPE PQalpha_sum = SIMINT_ADD(P_alpha, Q_alpha);
291 const SIMINT_DBLTYPE one_over_PQalpha_sum = SIMINT_DIV(const_1, PQalpha_sum);
292
293
294 /* construct R2 = (Px - Qx)**2 + (Py - Qy)**2 + (Pz -Qz)**2 */
295 SIMINT_DBLTYPE PQ[3];
296 PQ[0] = SIMINT_SUB(Pxyz[0], SIMINT_DBLLOAD(Q.x, j));
297 PQ[1] = SIMINT_SUB(Pxyz[1], SIMINT_DBLLOAD(Q.y, j));
298 PQ[2] = SIMINT_SUB(Pxyz[2], SIMINT_DBLLOAD(Q.z, j));
299 SIMINT_DBLTYPE R2 = SIMINT_MUL(PQ[0], PQ[0]);
300 R2 = SIMINT_FMADD(PQ[1], PQ[1], R2);
301 R2 = SIMINT_FMADD(PQ[2], PQ[2], R2);
302
303 const SIMINT_DBLTYPE alpha = SIMINT_MUL(PQalpha_mul, one_over_PQalpha_sum); // alpha from MEST
304 const SIMINT_DBLTYPE one_over_p = SIMINT_DIV(const_1, P_alpha);
305 const SIMINT_DBLTYPE one_over_q = SIMINT_DIV(const_1, Q_alpha);
306 const SIMINT_DBLTYPE one_over_2p = SIMINT_MUL(one_half, one_over_p);
307 const SIMINT_DBLTYPE one_over_2q = SIMINT_MUL(one_half, one_over_q);
308 const SIMINT_DBLTYPE one_over_2pq = SIMINT_MUL(one_half, one_over_PQalpha_sum);
309 const SIMINT_DBLTYPE Q_PA[3] = { SIMINT_DBLLOAD(Q.PA_x, j), SIMINT_DBLLOAD(Q.PA_y, j), SIMINT_DBLLOAD(Q.PA_z, j) };
310
311 // NOTE: Minus sign!
312 const SIMINT_DBLTYPE a_over_p = SIMINT_MUL(SIMINT_NEG(alpha), one_over_p);
313 SIMINT_DBLTYPE aop_PQ[3];
314 aop_PQ[0] = SIMINT_MUL(a_over_p, PQ[0]);
315 aop_PQ[1] = SIMINT_MUL(a_over_p, PQ[1]);
316 aop_PQ[2] = SIMINT_MUL(a_over_p, PQ[2]);
317
318 SIMINT_DBLTYPE a_over_q = SIMINT_MUL(alpha, one_over_q);
319 SIMINT_DBLTYPE aoq_PQ[3];
320 aoq_PQ[0] = SIMINT_MUL(a_over_q, PQ[0]);
321 aoq_PQ[1] = SIMINT_MUL(a_over_q, PQ[1]);
322 aoq_PQ[2] = SIMINT_MUL(a_over_q, PQ[2]);
323 // Put a minus sign here so we don't have to in RR routines
324 a_over_q = SIMINT_NEG(a_over_q);
325
326
327 //////////////////////////////////////////////
328 // Fjt function section
329 // Maximum v value: 15
330 //////////////////////////////////////////////
331 // The parameter to the Fjt function
332 const SIMINT_DBLTYPE F_x = SIMINT_MUL(R2, alpha);
333
334
335 const SIMINT_DBLTYPE Q_prefac = mask_load(nlane, Q.prefac + j);
336
337
338 boys_F_split(PRIM_INT__s_s_s_s, F_x, 15);
339 SIMINT_DBLTYPE prefac = SIMINT_SQRT(one_over_PQalpha_sum);
340 prefac = SIMINT_MUL(SIMINT_MUL(P_prefac, Q_prefac), prefac);
341 for(n = 0; n <= 15; n++)
342 PRIM_INT__s_s_s_s[n] = SIMINT_MUL(PRIM_INT__s_s_s_s[n], prefac);
343
344 //////////////////////////////////////////////
345 // Primitive integrals: Vertical recurrance
346 //////////////////////////////////////////////
347
348 const SIMINT_DBLTYPE vrr_const_1_over_2p = one_over_2p;
349 const SIMINT_DBLTYPE vrr_const_2_over_2p = SIMINT_MUL(const_2, one_over_2p);
350 const SIMINT_DBLTYPE vrr_const_3_over_2p = SIMINT_MUL(const_3, one_over_2p);
351 const SIMINT_DBLTYPE vrr_const_1_over_2q = one_over_2q;
352 const SIMINT_DBLTYPE vrr_const_2_over_2q = SIMINT_MUL(const_2, one_over_2q);
353 const SIMINT_DBLTYPE vrr_const_3_over_2q = SIMINT_MUL(const_3, one_over_2q);
354 const SIMINT_DBLTYPE vrr_const_4_over_2q = SIMINT_MUL(const_4, one_over_2q);
355 const SIMINT_DBLTYPE vrr_const_5_over_2q = SIMINT_MUL(const_5, one_over_2q);
356 const SIMINT_DBLTYPE vrr_const_6_over_2q = SIMINT_MUL(const_6, one_over_2q);
357 const SIMINT_DBLTYPE vrr_const_7_over_2q = SIMINT_MUL(const_7, one_over_2q);
358 const SIMINT_DBLTYPE vrr_const_8_over_2q = SIMINT_MUL(const_8, one_over_2q);
359 const SIMINT_DBLTYPE vrr_const_9_over_2q = SIMINT_MUL(const_9, one_over_2q);
360 const SIMINT_DBLTYPE vrr_const_10_over_2q = SIMINT_MUL(const_10, one_over_2q);
361 const SIMINT_DBLTYPE vrr_const_1_over_2pq = one_over_2pq;
362 const SIMINT_DBLTYPE vrr_const_2_over_2pq = SIMINT_MUL(const_2, one_over_2pq);
363 const SIMINT_DBLTYPE vrr_const_3_over_2pq = SIMINT_MUL(const_3, one_over_2pq);
364 const SIMINT_DBLTYPE vrr_const_4_over_2pq = SIMINT_MUL(const_4, one_over_2pq);
365 const SIMINT_DBLTYPE vrr_const_5_over_2pq = SIMINT_MUL(const_5, one_over_2pq);
366 const SIMINT_DBLTYPE vrr_const_6_over_2pq = SIMINT_MUL(const_6, one_over_2pq);
367 const SIMINT_DBLTYPE vrr_const_7_over_2pq = SIMINT_MUL(const_7, one_over_2pq);
368 const SIMINT_DBLTYPE vrr_const_8_over_2pq = SIMINT_MUL(const_8, one_over_2pq);
369 const SIMINT_DBLTYPE vrr_const_9_over_2pq = SIMINT_MUL(const_9, one_over_2pq);
370 const SIMINT_DBLTYPE vrr_const_10_over_2pq = SIMINT_MUL(const_10, one_over_2pq);
371 const SIMINT_DBLTYPE vrr_const_11_over_2pq = SIMINT_MUL(const_11, one_over_2pq);
372
373
374
375 // Forming PRIM_INT__s_s_p_s[15 * 3];
376 for(n = 0; n < 15; ++n) // loop over orders of auxiliary function
377 {
378
379 PRIM_INT__s_s_p_s[n * 3 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
380 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]);
381
382 PRIM_INT__s_s_p_s[n * 3 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
383 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]);
384
385 PRIM_INT__s_s_p_s[n * 3 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
386 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]);
387
388 }
389
390
391
392 // Forming PRIM_INT__s_s_d_s[14 * 6];
393 for(n = 0; n < 14; ++n) // loop over orders of auxiliary function
394 {
395
396 PRIM_INT__s_s_d_s[n * 6 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_p_s[n * 3 + 0]);
397 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]);
398 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]);
399
400 PRIM_INT__s_s_d_s[n * 6 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_p_s[n * 3 + 0]);
401 PRIM_INT__s_s_d_s[n * 6 + 1] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__s_s_p_s[(n+1) * 3 + 0], PRIM_INT__s_s_d_s[n * 6 + 1]);
402
403 PRIM_INT__s_s_d_s[n * 6 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_p_s[n * 3 + 0]);
404 PRIM_INT__s_s_d_s[n * 6 + 2] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__s_s_p_s[(n+1) * 3 + 0], PRIM_INT__s_s_d_s[n * 6 + 2]);
405
406 PRIM_INT__s_s_d_s[n * 6 + 3] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_p_s[n * 3 + 1]);
407 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]);
408 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]);
409
410 PRIM_INT__s_s_d_s[n * 6 + 4] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_p_s[n * 3 + 1]);
411 PRIM_INT__s_s_d_s[n * 6 + 4] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__s_s_p_s[(n+1) * 3 + 1], PRIM_INT__s_s_d_s[n * 6 + 4]);
412
413 PRIM_INT__s_s_d_s[n * 6 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_p_s[n * 3 + 2]);
414 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]);
415 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]);
416
417 }
418
419
420
421 // Forming PRIM_INT__s_s_f_s[13 * 10];
422 for(n = 0; n < 13; ++n) // loop over orders of auxiliary function
423 {
424
425 PRIM_INT__s_s_f_s[n * 10 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_d_s[n * 6 + 0]);
426 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]);
427 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]);
428
429 PRIM_INT__s_s_f_s[n * 10 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_d_s[n * 6 + 0]);
430 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]);
431
432 PRIM_INT__s_s_f_s[n * 10 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_d_s[n * 6 + 0]);
433 PRIM_INT__s_s_f_s[n * 10 + 2] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__s_s_d_s[(n+1) * 6 + 0], PRIM_INT__s_s_f_s[n * 10 + 2]);
434
435 PRIM_INT__s_s_f_s[n * 10 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_d_s[n * 6 + 3]);
436 PRIM_INT__s_s_f_s[n * 10 + 3] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__s_s_d_s[(n+1) * 6 + 3], PRIM_INT__s_s_f_s[n * 10 + 3]);
437
438 PRIM_INT__s_s_f_s[n * 10 + 4] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_d_s[n * 6 + 1]);
439 PRIM_INT__s_s_f_s[n * 10 + 4] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__s_s_d_s[(n+1) * 6 + 1], PRIM_INT__s_s_f_s[n * 10 + 4]);
440
441 PRIM_INT__s_s_f_s[n * 10 + 5] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_d_s[n * 6 + 5]);
442 PRIM_INT__s_s_f_s[n * 10 + 5] = SIMINT_FMADD( aoq_PQ[0], PRIM_INT__s_s_d_s[(n+1) * 6 + 5], PRIM_INT__s_s_f_s[n * 10 + 5]);
443
444 PRIM_INT__s_s_f_s[n * 10 + 6] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_d_s[n * 6 + 3]);
445 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]);
446 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]);
447
448 PRIM_INT__s_s_f_s[n * 10 + 7] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_d_s[n * 6 + 3]);
449 PRIM_INT__s_s_f_s[n * 10 + 7] = SIMINT_FMADD( aoq_PQ[2], PRIM_INT__s_s_d_s[(n+1) * 6 + 3], PRIM_INT__s_s_f_s[n * 10 + 7]);
450
451 PRIM_INT__s_s_f_s[n * 10 + 8] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_d_s[n * 6 + 5]);
452 PRIM_INT__s_s_f_s[n * 10 + 8] = SIMINT_FMADD( aoq_PQ[1], PRIM_INT__s_s_d_s[(n+1) * 6 + 5], PRIM_INT__s_s_f_s[n * 10 + 8]);
453
454 PRIM_INT__s_s_f_s[n * 10 + 9] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_d_s[n * 6 + 5]);
455 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]);
456 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]);
457
458 }
459
460
461 VRR_K_s_s_g_s(
462 PRIM_INT__s_s_g_s,
463 PRIM_INT__s_s_f_s,
464 PRIM_INT__s_s_d_s,
465 Q_PA,
466 a_over_q,
467 aoq_PQ,
468 one_over_2q,
469 12);
470
471
472 VRR_K_s_s_h_s(
473 PRIM_INT__s_s_h_s,
474 PRIM_INT__s_s_g_s,
475 PRIM_INT__s_s_f_s,
476 Q_PA,
477 a_over_q,
478 aoq_PQ,
479 one_over_2q,
480 11);
481
482
483 ostei_general_vrr1_K(6, 10,
484 one_over_2q, a_over_q, aoq_PQ, Q_PA,
485 PRIM_INT__s_s_h_s, PRIM_INT__s_s_g_s, PRIM_INT__s_s_i_s);
486
487
488 ostei_general_vrr_I(1, 0, 6, 0, 4,
489 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
490 PRIM_INT__s_s_i_s, NULL, NULL, PRIM_INT__s_s_h_s, NULL, PRIM_INT__p_s_i_s);
491
492
493 ostei_general_vrr_I(1, 0, 5, 0, 4,
494 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
495 PRIM_INT__s_s_h_s, NULL, NULL, PRIM_INT__s_s_g_s, NULL, PRIM_INT__p_s_h_s);
496
497
498 ostei_general_vrr_I(2, 0, 6, 0, 3,
499 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
500 PRIM_INT__p_s_i_s, PRIM_INT__s_s_i_s, NULL, PRIM_INT__p_s_h_s, NULL, PRIM_INT__d_s_i_s);
501
502
503 ostei_general_vrr1_K(7, 9,
504 one_over_2q, a_over_q, aoq_PQ, Q_PA,
505 PRIM_INT__s_s_i_s, PRIM_INT__s_s_h_s, PRIM_INT__s_s_k_s);
506
507
508 ostei_general_vrr_I(1, 0, 7, 0, 4,
509 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
510 PRIM_INT__s_s_k_s, NULL, NULL, PRIM_INT__s_s_i_s, NULL, PRIM_INT__p_s_k_s);
511
512
513 ostei_general_vrr_I(2, 0, 7, 0, 3,
514 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
515 PRIM_INT__p_s_k_s, PRIM_INT__s_s_k_s, NULL, PRIM_INT__p_s_i_s, NULL, PRIM_INT__d_s_k_s);
516
517
518 VRR_I_p_s_g_s(
519 PRIM_INT__p_s_g_s,
520 PRIM_INT__s_s_g_s,
521 PRIM_INT__s_s_f_s,
522 P_PA,
523 aop_PQ,
524 one_over_2pq,
525 4);
526
527
528 ostei_general_vrr_I(2, 0, 5, 0, 3,
529 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
530 PRIM_INT__p_s_h_s, PRIM_INT__s_s_h_s, NULL, PRIM_INT__p_s_g_s, NULL, PRIM_INT__d_s_h_s);
531
532
533 ostei_general_vrr_I(3, 0, 6, 0, 2,
534 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
535 PRIM_INT__d_s_i_s, PRIM_INT__p_s_i_s, NULL, PRIM_INT__d_s_h_s, NULL, PRIM_INT__f_s_i_s);
536
537
538 ostei_general_vrr1_K(8, 8,
539 one_over_2q, a_over_q, aoq_PQ, Q_PA,
540 PRIM_INT__s_s_k_s, PRIM_INT__s_s_i_s, PRIM_INT__s_s_l_s);
541
542
543 ostei_general_vrr_I(1, 0, 8, 0, 4,
544 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
545 PRIM_INT__s_s_l_s, NULL, NULL, PRIM_INT__s_s_k_s, NULL, PRIM_INT__p_s_l_s);
546
547
548 ostei_general_vrr_I(2, 0, 8, 0, 3,
549 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
550 PRIM_INT__p_s_l_s, PRIM_INT__s_s_l_s, NULL, PRIM_INT__p_s_k_s, NULL, PRIM_INT__d_s_l_s);
551
552
553 ostei_general_vrr_I(3, 0, 7, 0, 2,
554 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
555 PRIM_INT__d_s_k_s, PRIM_INT__p_s_k_s, NULL, PRIM_INT__d_s_i_s, NULL, PRIM_INT__f_s_k_s);
556
557
558 VRR_I_p_s_f_s(
559 PRIM_INT__p_s_f_s,
560 PRIM_INT__s_s_f_s,
561 PRIM_INT__s_s_d_s,
562 P_PA,
563 aop_PQ,
564 one_over_2pq,
565 4);
566
567
568 ostei_general_vrr_I(2, 0, 4, 0, 3,
569 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
570 PRIM_INT__p_s_g_s, PRIM_INT__s_s_g_s, NULL, PRIM_INT__p_s_f_s, NULL, PRIM_INT__d_s_g_s);
571
572
573 ostei_general_vrr_I(3, 0, 5, 0, 2,
574 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
575 PRIM_INT__d_s_h_s, PRIM_INT__p_s_h_s, NULL, PRIM_INT__d_s_g_s, NULL, PRIM_INT__f_s_h_s);
576
577
578 ostei_general_vrr_I(4, 0, 6, 0, 1,
579 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
580 PRIM_INT__f_s_i_s, PRIM_INT__d_s_i_s, NULL, PRIM_INT__f_s_h_s, NULL, PRIM_INT__g_s_i_s);
581
582
583 ostei_general_vrr1_K(9, 7,
584 one_over_2q, a_over_q, aoq_PQ, Q_PA,
585 PRIM_INT__s_s_l_s, PRIM_INT__s_s_k_s, PRIM_INT__s_s_m_s);
586
587
588 ostei_general_vrr_I(1, 0, 9, 0, 4,
589 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
590 PRIM_INT__s_s_m_s, NULL, NULL, PRIM_INT__s_s_l_s, NULL, PRIM_INT__p_s_m_s);
591
592
593 ostei_general_vrr_I(2, 0, 9, 0, 3,
594 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
595 PRIM_INT__p_s_m_s, PRIM_INT__s_s_m_s, NULL, PRIM_INT__p_s_l_s, NULL, PRIM_INT__d_s_m_s);
596
597
598 ostei_general_vrr_I(3, 0, 8, 0, 2,
599 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
600 PRIM_INT__d_s_l_s, PRIM_INT__p_s_l_s, NULL, PRIM_INT__d_s_k_s, NULL, PRIM_INT__f_s_l_s);
601
602
603 ostei_general_vrr_I(4, 0, 7, 0, 1,
604 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
605 PRIM_INT__f_s_k_s, PRIM_INT__d_s_k_s, NULL, PRIM_INT__f_s_i_s, NULL, PRIM_INT__g_s_k_s);
606
607
608 ostei_general_vrr1_K(10, 6,
609 one_over_2q, a_over_q, aoq_PQ, Q_PA,
610 PRIM_INT__s_s_m_s, PRIM_INT__s_s_l_s, PRIM_INT__s_s_n_s);
611
612
613 ostei_general_vrr_I(1, 0, 10, 0, 4,
614 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
615 PRIM_INT__s_s_n_s, NULL, NULL, PRIM_INT__s_s_m_s, NULL, PRIM_INT__p_s_n_s);
616
617
618 ostei_general_vrr_I(2, 0, 10, 0, 3,
619 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
620 PRIM_INT__p_s_n_s, PRIM_INT__s_s_n_s, NULL, PRIM_INT__p_s_m_s, NULL, PRIM_INT__d_s_n_s);
621
622
623 ostei_general_vrr_I(3, 0, 9, 0, 2,
624 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
625 PRIM_INT__d_s_m_s, PRIM_INT__p_s_m_s, NULL, PRIM_INT__d_s_l_s, NULL, PRIM_INT__f_s_m_s);
626
627
628 ostei_general_vrr_I(4, 0, 8, 0, 1,
629 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
630 PRIM_INT__f_s_l_s, PRIM_INT__d_s_l_s, NULL, PRIM_INT__f_s_k_s, NULL, PRIM_INT__g_s_l_s);
631
632
633 ostei_general_vrr1_K(11, 5,
634 one_over_2q, a_over_q, aoq_PQ, Q_PA,
635 PRIM_INT__s_s_n_s, PRIM_INT__s_s_m_s, PRIM_INT__s_s_o_s);
636
637
638 ostei_general_vrr_I(1, 0, 11, 0, 4,
639 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
640 PRIM_INT__s_s_o_s, NULL, NULL, PRIM_INT__s_s_n_s, NULL, PRIM_INT__p_s_o_s);
641
642
643 ostei_general_vrr_I(2, 0, 11, 0, 3,
644 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
645 PRIM_INT__p_s_o_s, PRIM_INT__s_s_o_s, NULL, PRIM_INT__p_s_n_s, NULL, PRIM_INT__d_s_o_s);
646
647
648 ostei_general_vrr_I(3, 0, 10, 0, 2,
649 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
650 PRIM_INT__d_s_n_s, PRIM_INT__p_s_n_s, NULL, PRIM_INT__d_s_m_s, NULL, PRIM_INT__f_s_n_s);
651
652
653 ostei_general_vrr_I(4, 0, 9, 0, 1,
654 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
655 PRIM_INT__f_s_m_s, PRIM_INT__d_s_m_s, NULL, PRIM_INT__f_s_l_s, NULL, PRIM_INT__g_s_m_s);
656
657
658 ostei_general_vrr_I(3, 0, 11, 0, 2,
659 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
660 PRIM_INT__d_s_o_s, PRIM_INT__p_s_o_s, NULL, PRIM_INT__d_s_n_s, NULL, PRIM_INT__f_s_o_s);
661
662
663 ostei_general_vrr_I(4, 0, 10, 0, 1,
664 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
665 PRIM_INT__f_s_n_s, PRIM_INT__d_s_n_s, NULL, PRIM_INT__f_s_m_s, NULL, PRIM_INT__g_s_n_s);
666
667
668 ostei_general_vrr_I(4, 0, 11, 0, 1,
669 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
670 PRIM_INT__f_s_o_s, PRIM_INT__d_s_o_s, NULL, PRIM_INT__f_s_n_s, NULL, PRIM_INT__g_s_o_s);
671
672
673
674
675 ////////////////////////////////////
676 // Accumulate contracted integrals
677 ////////////////////////////////////
678 if(lastoffset == 0)
679 {
680 contract_all(168, PRIM_INT__d_s_i_s, PRIM_PTR_INT__d_s_i_s);
681 contract_all(216, PRIM_INT__d_s_k_s, PRIM_PTR_INT__d_s_k_s);
682 contract_all(270, PRIM_INT__d_s_l_s, PRIM_PTR_INT__d_s_l_s);
683 contract_all(330, PRIM_INT__d_s_m_s, PRIM_PTR_INT__d_s_m_s);
684 contract_all(396, PRIM_INT__d_s_n_s, PRIM_PTR_INT__d_s_n_s);
685 contract_all(468, PRIM_INT__d_s_o_s, PRIM_PTR_INT__d_s_o_s);
686 contract_all(280, PRIM_INT__f_s_i_s, PRIM_PTR_INT__f_s_i_s);
687 contract_all(360, PRIM_INT__f_s_k_s, PRIM_PTR_INT__f_s_k_s);
688 contract_all(450, PRIM_INT__f_s_l_s, PRIM_PTR_INT__f_s_l_s);
689 contract_all(550, PRIM_INT__f_s_m_s, PRIM_PTR_INT__f_s_m_s);
690 contract_all(660, PRIM_INT__f_s_n_s, PRIM_PTR_INT__f_s_n_s);
691 contract_all(780, PRIM_INT__f_s_o_s, PRIM_PTR_INT__f_s_o_s);
692 contract_all(420, PRIM_INT__g_s_i_s, PRIM_PTR_INT__g_s_i_s);
693 contract_all(540, PRIM_INT__g_s_k_s, PRIM_PTR_INT__g_s_k_s);
694 contract_all(675, PRIM_INT__g_s_l_s, PRIM_PTR_INT__g_s_l_s);
695 contract_all(825, PRIM_INT__g_s_m_s, PRIM_PTR_INT__g_s_m_s);
696 contract_all(990, PRIM_INT__g_s_n_s, PRIM_PTR_INT__g_s_n_s);
697 contract_all(1170, PRIM_INT__g_s_o_s, PRIM_PTR_INT__g_s_o_s);
698 }
699 else
700 {
701 contract(168, shelloffsets, PRIM_INT__d_s_i_s, PRIM_PTR_INT__d_s_i_s);
702 contract(216, shelloffsets, PRIM_INT__d_s_k_s, PRIM_PTR_INT__d_s_k_s);
703 contract(270, shelloffsets, PRIM_INT__d_s_l_s, PRIM_PTR_INT__d_s_l_s);
704 contract(330, shelloffsets, PRIM_INT__d_s_m_s, PRIM_PTR_INT__d_s_m_s);
705 contract(396, shelloffsets, PRIM_INT__d_s_n_s, PRIM_PTR_INT__d_s_n_s);
706 contract(468, shelloffsets, PRIM_INT__d_s_o_s, PRIM_PTR_INT__d_s_o_s);
707 contract(280, shelloffsets, PRIM_INT__f_s_i_s, PRIM_PTR_INT__f_s_i_s);
708 contract(360, shelloffsets, PRIM_INT__f_s_k_s, PRIM_PTR_INT__f_s_k_s);
709 contract(450, shelloffsets, PRIM_INT__f_s_l_s, PRIM_PTR_INT__f_s_l_s);
710 contract(550, shelloffsets, PRIM_INT__f_s_m_s, PRIM_PTR_INT__f_s_m_s);
711 contract(660, shelloffsets, PRIM_INT__f_s_n_s, PRIM_PTR_INT__f_s_n_s);
712 contract(780, shelloffsets, PRIM_INT__f_s_o_s, PRIM_PTR_INT__f_s_o_s);
713 contract(420, shelloffsets, PRIM_INT__g_s_i_s, PRIM_PTR_INT__g_s_i_s);
714 contract(540, shelloffsets, PRIM_INT__g_s_k_s, PRIM_PTR_INT__g_s_k_s);
715 contract(675, shelloffsets, PRIM_INT__g_s_l_s, PRIM_PTR_INT__g_s_l_s);
716 contract(825, shelloffsets, PRIM_INT__g_s_m_s, PRIM_PTR_INT__g_s_m_s);
717 contract(990, shelloffsets, PRIM_INT__g_s_n_s, PRIM_PTR_INT__g_s_n_s);
718 contract(1170, shelloffsets, PRIM_INT__g_s_o_s, PRIM_PTR_INT__g_s_o_s);
719 PRIM_PTR_INT__d_s_i_s += lastoffset*168;
720 PRIM_PTR_INT__d_s_k_s += lastoffset*216;
721 PRIM_PTR_INT__d_s_l_s += lastoffset*270;
722 PRIM_PTR_INT__d_s_m_s += lastoffset*330;
723 PRIM_PTR_INT__d_s_n_s += lastoffset*396;
724 PRIM_PTR_INT__d_s_o_s += lastoffset*468;
725 PRIM_PTR_INT__f_s_i_s += lastoffset*280;
726 PRIM_PTR_INT__f_s_k_s += lastoffset*360;
727 PRIM_PTR_INT__f_s_l_s += lastoffset*450;
728 PRIM_PTR_INT__f_s_m_s += lastoffset*550;
729 PRIM_PTR_INT__f_s_n_s += lastoffset*660;
730 PRIM_PTR_INT__f_s_o_s += lastoffset*780;
731 PRIM_PTR_INT__g_s_i_s += lastoffset*420;
732 PRIM_PTR_INT__g_s_k_s += lastoffset*540;
733 PRIM_PTR_INT__g_s_l_s += lastoffset*675;
734 PRIM_PTR_INT__g_s_m_s += lastoffset*825;
735 PRIM_PTR_INT__g_s_n_s += lastoffset*990;
736 PRIM_PTR_INT__g_s_o_s += lastoffset*1170;
737 }
738
739 } // close loop over j
740 } // close loop over i
741
742 //Advance to the next batch
743 jstart = SIMINT_SIMD_ROUND(jend);
744
745 //////////////////////////////////////////////
746 // Contracted integrals: Horizontal recurrance
747 //////////////////////////////////////////////
748
749
750 const double hAB[3] = { P.AB_x[ab], P.AB_y[ab], P.AB_z[ab] };
751
752
753 for(abcd = 0; abcd < nshellbatch; ++abcd, ++real_abcd)
754 {
755 const double hCD[3] = { Q.AB_x[cd+abcd], Q.AB_y[cd+abcd], Q.AB_z[cd+abcd] };
756
757 // set up HRR pointers
758 double const * restrict HRR_INT__d_s_i_s = INT__d_s_i_s + abcd * 168;
759 double const * restrict HRR_INT__d_s_k_s = INT__d_s_k_s + abcd * 216;
760 double const * restrict HRR_INT__d_s_l_s = INT__d_s_l_s + abcd * 270;
761 double const * restrict HRR_INT__d_s_m_s = INT__d_s_m_s + abcd * 330;
762 double const * restrict HRR_INT__d_s_n_s = INT__d_s_n_s + abcd * 396;
763 double const * restrict HRR_INT__d_s_o_s = INT__d_s_o_s + abcd * 468;
764 double const * restrict HRR_INT__f_s_i_s = INT__f_s_i_s + abcd * 280;
765 double const * restrict HRR_INT__f_s_k_s = INT__f_s_k_s + abcd * 360;
766 double const * restrict HRR_INT__f_s_l_s = INT__f_s_l_s + abcd * 450;
767 double const * restrict HRR_INT__f_s_m_s = INT__f_s_m_s + abcd * 550;
768 double const * restrict HRR_INT__f_s_n_s = INT__f_s_n_s + abcd * 660;
769 double const * restrict HRR_INT__f_s_o_s = INT__f_s_o_s + abcd * 780;
770 double const * restrict HRR_INT__g_s_i_s = INT__g_s_i_s + abcd * 420;
771 double const * restrict HRR_INT__g_s_k_s = INT__g_s_k_s + abcd * 540;
772 double const * restrict HRR_INT__g_s_l_s = INT__g_s_l_s + abcd * 675;
773 double const * restrict HRR_INT__g_s_m_s = INT__g_s_m_s + abcd * 825;
774 double const * restrict HRR_INT__g_s_n_s = INT__g_s_n_s + abcd * 990;
775 double const * restrict HRR_INT__g_s_o_s = INT__g_s_o_s + abcd * 1170;
776 double * restrict HRR_INT__d_d_i_h = INT__d_d_i_h + real_abcd * 21168;
777
778 // form INT__d_p_i_s
779 for(iket = 0; iket < 28; ++iket)
780 {
781 HRR_INT__d_p_i_s[0 * 28 + iket] = HRR_INT__f_s_i_s[0 * 28 + iket] + ( hAB[0] * HRR_INT__d_s_i_s[0 * 28 + iket] );
782
783 HRR_INT__d_p_i_s[1 * 28 + iket] = HRR_INT__f_s_i_s[1 * 28 + iket] + ( hAB[1] * HRR_INT__d_s_i_s[0 * 28 + iket] );
784
785 HRR_INT__d_p_i_s[2 * 28 + iket] = HRR_INT__f_s_i_s[2 * 28 + iket] + ( hAB[2] * HRR_INT__d_s_i_s[0 * 28 + iket] );
786
787 HRR_INT__d_p_i_s[3 * 28 + iket] = HRR_INT__f_s_i_s[1 * 28 + iket] + ( hAB[0] * HRR_INT__d_s_i_s[1 * 28 + iket] );
788
789 HRR_INT__d_p_i_s[4 * 28 + iket] = HRR_INT__f_s_i_s[3 * 28 + iket] + ( hAB[1] * HRR_INT__d_s_i_s[1 * 28 + iket] );
790
791 HRR_INT__d_p_i_s[5 * 28 + iket] = HRR_INT__f_s_i_s[4 * 28 + iket] + ( hAB[2] * HRR_INT__d_s_i_s[1 * 28 + iket] );
792
793 HRR_INT__d_p_i_s[6 * 28 + iket] = HRR_INT__f_s_i_s[2 * 28 + iket] + ( hAB[0] * HRR_INT__d_s_i_s[2 * 28 + iket] );
794
795 HRR_INT__d_p_i_s[7 * 28 + iket] = HRR_INT__f_s_i_s[4 * 28 + iket] + ( hAB[1] * HRR_INT__d_s_i_s[2 * 28 + iket] );
796
797 HRR_INT__d_p_i_s[8 * 28 + iket] = HRR_INT__f_s_i_s[5 * 28 + iket] + ( hAB[2] * HRR_INT__d_s_i_s[2 * 28 + iket] );
798
799 HRR_INT__d_p_i_s[9 * 28 + iket] = HRR_INT__f_s_i_s[3 * 28 + iket] + ( hAB[0] * HRR_INT__d_s_i_s[3 * 28 + iket] );
800
801 HRR_INT__d_p_i_s[10 * 28 + iket] = HRR_INT__f_s_i_s[6 * 28 + iket] + ( hAB[1] * HRR_INT__d_s_i_s[3 * 28 + iket] );
802
803 HRR_INT__d_p_i_s[11 * 28 + iket] = HRR_INT__f_s_i_s[7 * 28 + iket] + ( hAB[2] * HRR_INT__d_s_i_s[3 * 28 + iket] );
804
805 HRR_INT__d_p_i_s[12 * 28 + iket] = HRR_INT__f_s_i_s[4 * 28 + iket] + ( hAB[0] * HRR_INT__d_s_i_s[4 * 28 + iket] );
806
807 HRR_INT__d_p_i_s[13 * 28 + iket] = HRR_INT__f_s_i_s[7 * 28 + iket] + ( hAB[1] * HRR_INT__d_s_i_s[4 * 28 + iket] );
808
809 HRR_INT__d_p_i_s[14 * 28 + iket] = HRR_INT__f_s_i_s[8 * 28 + iket] + ( hAB[2] * HRR_INT__d_s_i_s[4 * 28 + iket] );
810
811 HRR_INT__d_p_i_s[15 * 28 + iket] = HRR_INT__f_s_i_s[5 * 28 + iket] + ( hAB[0] * HRR_INT__d_s_i_s[5 * 28 + iket] );
812
813 HRR_INT__d_p_i_s[16 * 28 + iket] = HRR_INT__f_s_i_s[8 * 28 + iket] + ( hAB[1] * HRR_INT__d_s_i_s[5 * 28 + iket] );
814
815 HRR_INT__d_p_i_s[17 * 28 + iket] = HRR_INT__f_s_i_s[9 * 28 + iket] + ( hAB[2] * HRR_INT__d_s_i_s[5 * 28 + iket] );
816
817 }
818
819
820 // form INT__d_p_k_s
821 for(iket = 0; iket < 36; ++iket)
822 {
823 HRR_INT__d_p_k_s[0 * 36 + iket] = HRR_INT__f_s_k_s[0 * 36 + iket] + ( hAB[0] * HRR_INT__d_s_k_s[0 * 36 + iket] );
824
825 HRR_INT__d_p_k_s[1 * 36 + iket] = HRR_INT__f_s_k_s[1 * 36 + iket] + ( hAB[1] * HRR_INT__d_s_k_s[0 * 36 + iket] );
826
827 HRR_INT__d_p_k_s[2 * 36 + iket] = HRR_INT__f_s_k_s[2 * 36 + iket] + ( hAB[2] * HRR_INT__d_s_k_s[0 * 36 + iket] );
828
829 HRR_INT__d_p_k_s[3 * 36 + iket] = HRR_INT__f_s_k_s[1 * 36 + iket] + ( hAB[0] * HRR_INT__d_s_k_s[1 * 36 + iket] );
830
831 HRR_INT__d_p_k_s[4 * 36 + iket] = HRR_INT__f_s_k_s[3 * 36 + iket] + ( hAB[1] * HRR_INT__d_s_k_s[1 * 36 + iket] );
832
833 HRR_INT__d_p_k_s[5 * 36 + iket] = HRR_INT__f_s_k_s[4 * 36 + iket] + ( hAB[2] * HRR_INT__d_s_k_s[1 * 36 + iket] );
834
835 HRR_INT__d_p_k_s[6 * 36 + iket] = HRR_INT__f_s_k_s[2 * 36 + iket] + ( hAB[0] * HRR_INT__d_s_k_s[2 * 36 + iket] );
836
837 HRR_INT__d_p_k_s[7 * 36 + iket] = HRR_INT__f_s_k_s[4 * 36 + iket] + ( hAB[1] * HRR_INT__d_s_k_s[2 * 36 + iket] );
838
839 HRR_INT__d_p_k_s[8 * 36 + iket] = HRR_INT__f_s_k_s[5 * 36 + iket] + ( hAB[2] * HRR_INT__d_s_k_s[2 * 36 + iket] );
840
841 HRR_INT__d_p_k_s[9 * 36 + iket] = HRR_INT__f_s_k_s[3 * 36 + iket] + ( hAB[0] * HRR_INT__d_s_k_s[3 * 36 + iket] );
842
843 HRR_INT__d_p_k_s[10 * 36 + iket] = HRR_INT__f_s_k_s[6 * 36 + iket] + ( hAB[1] * HRR_INT__d_s_k_s[3 * 36 + iket] );
844
845 HRR_INT__d_p_k_s[11 * 36 + iket] = HRR_INT__f_s_k_s[7 * 36 + iket] + ( hAB[2] * HRR_INT__d_s_k_s[3 * 36 + iket] );
846
847 HRR_INT__d_p_k_s[12 * 36 + iket] = HRR_INT__f_s_k_s[4 * 36 + iket] + ( hAB[0] * HRR_INT__d_s_k_s[4 * 36 + iket] );
848
849 HRR_INT__d_p_k_s[13 * 36 + iket] = HRR_INT__f_s_k_s[7 * 36 + iket] + ( hAB[1] * HRR_INT__d_s_k_s[4 * 36 + iket] );
850
851 HRR_INT__d_p_k_s[14 * 36 + iket] = HRR_INT__f_s_k_s[8 * 36 + iket] + ( hAB[2] * HRR_INT__d_s_k_s[4 * 36 + iket] );
852
853 HRR_INT__d_p_k_s[15 * 36 + iket] = HRR_INT__f_s_k_s[5 * 36 + iket] + ( hAB[0] * HRR_INT__d_s_k_s[5 * 36 + iket] );
854
855 HRR_INT__d_p_k_s[16 * 36 + iket] = HRR_INT__f_s_k_s[8 * 36 + iket] + ( hAB[1] * HRR_INT__d_s_k_s[5 * 36 + iket] );
856
857 HRR_INT__d_p_k_s[17 * 36 + iket] = HRR_INT__f_s_k_s[9 * 36 + iket] + ( hAB[2] * HRR_INT__d_s_k_s[5 * 36 + iket] );
858
859 }
860
861
862 // form INT__d_p_l_s
863 for(iket = 0; iket < 45; ++iket)
864 {
865 HRR_INT__d_p_l_s[0 * 45 + iket] = HRR_INT__f_s_l_s[0 * 45 + iket] + ( hAB[0] * HRR_INT__d_s_l_s[0 * 45 + iket] );
866
867 HRR_INT__d_p_l_s[1 * 45 + iket] = HRR_INT__f_s_l_s[1 * 45 + iket] + ( hAB[1] * HRR_INT__d_s_l_s[0 * 45 + iket] );
868
869 HRR_INT__d_p_l_s[2 * 45 + iket] = HRR_INT__f_s_l_s[2 * 45 + iket] + ( hAB[2] * HRR_INT__d_s_l_s[0 * 45 + iket] );
870
871 HRR_INT__d_p_l_s[3 * 45 + iket] = HRR_INT__f_s_l_s[1 * 45 + iket] + ( hAB[0] * HRR_INT__d_s_l_s[1 * 45 + iket] );
872
873 HRR_INT__d_p_l_s[4 * 45 + iket] = HRR_INT__f_s_l_s[3 * 45 + iket] + ( hAB[1] * HRR_INT__d_s_l_s[1 * 45 + iket] );
874
875 HRR_INT__d_p_l_s[5 * 45 + iket] = HRR_INT__f_s_l_s[4 * 45 + iket] + ( hAB[2] * HRR_INT__d_s_l_s[1 * 45 + iket] );
876
877 HRR_INT__d_p_l_s[6 * 45 + iket] = HRR_INT__f_s_l_s[2 * 45 + iket] + ( hAB[0] * HRR_INT__d_s_l_s[2 * 45 + iket] );
878
879 HRR_INT__d_p_l_s[7 * 45 + iket] = HRR_INT__f_s_l_s[4 * 45 + iket] + ( hAB[1] * HRR_INT__d_s_l_s[2 * 45 + iket] );
880
881 HRR_INT__d_p_l_s[8 * 45 + iket] = HRR_INT__f_s_l_s[5 * 45 + iket] + ( hAB[2] * HRR_INT__d_s_l_s[2 * 45 + iket] );
882
883 HRR_INT__d_p_l_s[9 * 45 + iket] = HRR_INT__f_s_l_s[3 * 45 + iket] + ( hAB[0] * HRR_INT__d_s_l_s[3 * 45 + iket] );
884
885 HRR_INT__d_p_l_s[10 * 45 + iket] = HRR_INT__f_s_l_s[6 * 45 + iket] + ( hAB[1] * HRR_INT__d_s_l_s[3 * 45 + iket] );
886
887 HRR_INT__d_p_l_s[11 * 45 + iket] = HRR_INT__f_s_l_s[7 * 45 + iket] + ( hAB[2] * HRR_INT__d_s_l_s[3 * 45 + iket] );
888
889 HRR_INT__d_p_l_s[12 * 45 + iket] = HRR_INT__f_s_l_s[4 * 45 + iket] + ( hAB[0] * HRR_INT__d_s_l_s[4 * 45 + iket] );
890
891 HRR_INT__d_p_l_s[13 * 45 + iket] = HRR_INT__f_s_l_s[7 * 45 + iket] + ( hAB[1] * HRR_INT__d_s_l_s[4 * 45 + iket] );
892
893 HRR_INT__d_p_l_s[14 * 45 + iket] = HRR_INT__f_s_l_s[8 * 45 + iket] + ( hAB[2] * HRR_INT__d_s_l_s[4 * 45 + iket] );
894
895 HRR_INT__d_p_l_s[15 * 45 + iket] = HRR_INT__f_s_l_s[5 * 45 + iket] + ( hAB[0] * HRR_INT__d_s_l_s[5 * 45 + iket] );
896
897 HRR_INT__d_p_l_s[16 * 45 + iket] = HRR_INT__f_s_l_s[8 * 45 + iket] + ( hAB[1] * HRR_INT__d_s_l_s[5 * 45 + iket] );
898
899 HRR_INT__d_p_l_s[17 * 45 + iket] = HRR_INT__f_s_l_s[9 * 45 + iket] + ( hAB[2] * HRR_INT__d_s_l_s[5 * 45 + iket] );
900
901 }
902
903
904 // form INT__d_p_m_s
905 for(iket = 0; iket < 55; ++iket)
906 {
907 HRR_INT__d_p_m_s[0 * 55 + iket] = HRR_INT__f_s_m_s[0 * 55 + iket] + ( hAB[0] * HRR_INT__d_s_m_s[0 * 55 + iket] );
908
909 HRR_INT__d_p_m_s[1 * 55 + iket] = HRR_INT__f_s_m_s[1 * 55 + iket] + ( hAB[1] * HRR_INT__d_s_m_s[0 * 55 + iket] );
910
911 HRR_INT__d_p_m_s[2 * 55 + iket] = HRR_INT__f_s_m_s[2 * 55 + iket] + ( hAB[2] * HRR_INT__d_s_m_s[0 * 55 + iket] );
912
913 HRR_INT__d_p_m_s[3 * 55 + iket] = HRR_INT__f_s_m_s[1 * 55 + iket] + ( hAB[0] * HRR_INT__d_s_m_s[1 * 55 + iket] );
914
915 HRR_INT__d_p_m_s[4 * 55 + iket] = HRR_INT__f_s_m_s[3 * 55 + iket] + ( hAB[1] * HRR_INT__d_s_m_s[1 * 55 + iket] );
916
917 HRR_INT__d_p_m_s[5 * 55 + iket] = HRR_INT__f_s_m_s[4 * 55 + iket] + ( hAB[2] * HRR_INT__d_s_m_s[1 * 55 + iket] );
918
919 HRR_INT__d_p_m_s[6 * 55 + iket] = HRR_INT__f_s_m_s[2 * 55 + iket] + ( hAB[0] * HRR_INT__d_s_m_s[2 * 55 + iket] );
920
921 HRR_INT__d_p_m_s[7 * 55 + iket] = HRR_INT__f_s_m_s[4 * 55 + iket] + ( hAB[1] * HRR_INT__d_s_m_s[2 * 55 + iket] );
922
923 HRR_INT__d_p_m_s[8 * 55 + iket] = HRR_INT__f_s_m_s[5 * 55 + iket] + ( hAB[2] * HRR_INT__d_s_m_s[2 * 55 + iket] );
924
925 HRR_INT__d_p_m_s[9 * 55 + iket] = HRR_INT__f_s_m_s[3 * 55 + iket] + ( hAB[0] * HRR_INT__d_s_m_s[3 * 55 + iket] );
926
927 HRR_INT__d_p_m_s[10 * 55 + iket] = HRR_INT__f_s_m_s[6 * 55 + iket] + ( hAB[1] * HRR_INT__d_s_m_s[3 * 55 + iket] );
928
929 HRR_INT__d_p_m_s[11 * 55 + iket] = HRR_INT__f_s_m_s[7 * 55 + iket] + ( hAB[2] * HRR_INT__d_s_m_s[3 * 55 + iket] );
930
931 HRR_INT__d_p_m_s[12 * 55 + iket] = HRR_INT__f_s_m_s[4 * 55 + iket] + ( hAB[0] * HRR_INT__d_s_m_s[4 * 55 + iket] );
932
933 HRR_INT__d_p_m_s[13 * 55 + iket] = HRR_INT__f_s_m_s[7 * 55 + iket] + ( hAB[1] * HRR_INT__d_s_m_s[4 * 55 + iket] );
934
935 HRR_INT__d_p_m_s[14 * 55 + iket] = HRR_INT__f_s_m_s[8 * 55 + iket] + ( hAB[2] * HRR_INT__d_s_m_s[4 * 55 + iket] );
936
937 HRR_INT__d_p_m_s[15 * 55 + iket] = HRR_INT__f_s_m_s[5 * 55 + iket] + ( hAB[0] * HRR_INT__d_s_m_s[5 * 55 + iket] );
938
939 HRR_INT__d_p_m_s[16 * 55 + iket] = HRR_INT__f_s_m_s[8 * 55 + iket] + ( hAB[1] * HRR_INT__d_s_m_s[5 * 55 + iket] );
940
941 HRR_INT__d_p_m_s[17 * 55 + iket] = HRR_INT__f_s_m_s[9 * 55 + iket] + ( hAB[2] * HRR_INT__d_s_m_s[5 * 55 + iket] );
942
943 }
944
945
946 // form INT__d_p_n_s
947 for(iket = 0; iket < 66; ++iket)
948 {
949 HRR_INT__d_p_n_s[0 * 66 + iket] = HRR_INT__f_s_n_s[0 * 66 + iket] + ( hAB[0] * HRR_INT__d_s_n_s[0 * 66 + iket] );
950
951 HRR_INT__d_p_n_s[1 * 66 + iket] = HRR_INT__f_s_n_s[1 * 66 + iket] + ( hAB[1] * HRR_INT__d_s_n_s[0 * 66 + iket] );
952
953 HRR_INT__d_p_n_s[2 * 66 + iket] = HRR_INT__f_s_n_s[2 * 66 + iket] + ( hAB[2] * HRR_INT__d_s_n_s[0 * 66 + iket] );
954
955 HRR_INT__d_p_n_s[3 * 66 + iket] = HRR_INT__f_s_n_s[1 * 66 + iket] + ( hAB[0] * HRR_INT__d_s_n_s[1 * 66 + iket] );
956
957 HRR_INT__d_p_n_s[4 * 66 + iket] = HRR_INT__f_s_n_s[3 * 66 + iket] + ( hAB[1] * HRR_INT__d_s_n_s[1 * 66 + iket] );
958
959 HRR_INT__d_p_n_s[5 * 66 + iket] = HRR_INT__f_s_n_s[4 * 66 + iket] + ( hAB[2] * HRR_INT__d_s_n_s[1 * 66 + iket] );
960
961 HRR_INT__d_p_n_s[6 * 66 + iket] = HRR_INT__f_s_n_s[2 * 66 + iket] + ( hAB[0] * HRR_INT__d_s_n_s[2 * 66 + iket] );
962
963 HRR_INT__d_p_n_s[7 * 66 + iket] = HRR_INT__f_s_n_s[4 * 66 + iket] + ( hAB[1] * HRR_INT__d_s_n_s[2 * 66 + iket] );
964
965 HRR_INT__d_p_n_s[8 * 66 + iket] = HRR_INT__f_s_n_s[5 * 66 + iket] + ( hAB[2] * HRR_INT__d_s_n_s[2 * 66 + iket] );
966
967 HRR_INT__d_p_n_s[9 * 66 + iket] = HRR_INT__f_s_n_s[3 * 66 + iket] + ( hAB[0] * HRR_INT__d_s_n_s[3 * 66 + iket] );
968
969 HRR_INT__d_p_n_s[10 * 66 + iket] = HRR_INT__f_s_n_s[6 * 66 + iket] + ( hAB[1] * HRR_INT__d_s_n_s[3 * 66 + iket] );
970
971 HRR_INT__d_p_n_s[11 * 66 + iket] = HRR_INT__f_s_n_s[7 * 66 + iket] + ( hAB[2] * HRR_INT__d_s_n_s[3 * 66 + iket] );
972
973 HRR_INT__d_p_n_s[12 * 66 + iket] = HRR_INT__f_s_n_s[4 * 66 + iket] + ( hAB[0] * HRR_INT__d_s_n_s[4 * 66 + iket] );
974
975 HRR_INT__d_p_n_s[13 * 66 + iket] = HRR_INT__f_s_n_s[7 * 66 + iket] + ( hAB[1] * HRR_INT__d_s_n_s[4 * 66 + iket] );
976
977 HRR_INT__d_p_n_s[14 * 66 + iket] = HRR_INT__f_s_n_s[8 * 66 + iket] + ( hAB[2] * HRR_INT__d_s_n_s[4 * 66 + iket] );
978
979 HRR_INT__d_p_n_s[15 * 66 + iket] = HRR_INT__f_s_n_s[5 * 66 + iket] + ( hAB[0] * HRR_INT__d_s_n_s[5 * 66 + iket] );
980
981 HRR_INT__d_p_n_s[16 * 66 + iket] = HRR_INT__f_s_n_s[8 * 66 + iket] + ( hAB[1] * HRR_INT__d_s_n_s[5 * 66 + iket] );
982
983 HRR_INT__d_p_n_s[17 * 66 + iket] = HRR_INT__f_s_n_s[9 * 66 + iket] + ( hAB[2] * HRR_INT__d_s_n_s[5 * 66 + iket] );
984
985 }
986
987
988 // form INT__d_p_o_s
989 for(iket = 0; iket < 78; ++iket)
990 {
991 HRR_INT__d_p_o_s[0 * 78 + iket] = HRR_INT__f_s_o_s[0 * 78 + iket] + ( hAB[0] * HRR_INT__d_s_o_s[0 * 78 + iket] );
992
993 HRR_INT__d_p_o_s[1 * 78 + iket] = HRR_INT__f_s_o_s[1 * 78 + iket] + ( hAB[1] * HRR_INT__d_s_o_s[0 * 78 + iket] );
994
995 HRR_INT__d_p_o_s[2 * 78 + iket] = HRR_INT__f_s_o_s[2 * 78 + iket] + ( hAB[2] * HRR_INT__d_s_o_s[0 * 78 + iket] );
996
997 HRR_INT__d_p_o_s[3 * 78 + iket] = HRR_INT__f_s_o_s[1 * 78 + iket] + ( hAB[0] * HRR_INT__d_s_o_s[1 * 78 + iket] );
998
999 HRR_INT__d_p_o_s[4 * 78 + iket] = HRR_INT__f_s_o_s[3 * 78 + iket] + ( hAB[1] * HRR_INT__d_s_o_s[1 * 78 + iket] );
1000
1001 HRR_INT__d_p_o_s[5 * 78 + iket] = HRR_INT__f_s_o_s[4 * 78 + iket] + ( hAB[2] * HRR_INT__d_s_o_s[1 * 78 + iket] );
1002
1003 HRR_INT__d_p_o_s[6 * 78 + iket] = HRR_INT__f_s_o_s[2 * 78 + iket] + ( hAB[0] * HRR_INT__d_s_o_s[2 * 78 + iket] );
1004
1005 HRR_INT__d_p_o_s[7 * 78 + iket] = HRR_INT__f_s_o_s[4 * 78 + iket] + ( hAB[1] * HRR_INT__d_s_o_s[2 * 78 + iket] );
1006
1007 HRR_INT__d_p_o_s[8 * 78 + iket] = HRR_INT__f_s_o_s[5 * 78 + iket] + ( hAB[2] * HRR_INT__d_s_o_s[2 * 78 + iket] );
1008
1009 HRR_INT__d_p_o_s[9 * 78 + iket] = HRR_INT__f_s_o_s[3 * 78 + iket] + ( hAB[0] * HRR_INT__d_s_o_s[3 * 78 + iket] );
1010
1011 HRR_INT__d_p_o_s[10 * 78 + iket] = HRR_INT__f_s_o_s[6 * 78 + iket] + ( hAB[1] * HRR_INT__d_s_o_s[3 * 78 + iket] );
1012
1013 HRR_INT__d_p_o_s[11 * 78 + iket] = HRR_INT__f_s_o_s[7 * 78 + iket] + ( hAB[2] * HRR_INT__d_s_o_s[3 * 78 + iket] );
1014
1015 HRR_INT__d_p_o_s[12 * 78 + iket] = HRR_INT__f_s_o_s[4 * 78 + iket] + ( hAB[0] * HRR_INT__d_s_o_s[4 * 78 + iket] );
1016
1017 HRR_INT__d_p_o_s[13 * 78 + iket] = HRR_INT__f_s_o_s[7 * 78 + iket] + ( hAB[1] * HRR_INT__d_s_o_s[4 * 78 + iket] );
1018
1019 HRR_INT__d_p_o_s[14 * 78 + iket] = HRR_INT__f_s_o_s[8 * 78 + iket] + ( hAB[2] * HRR_INT__d_s_o_s[4 * 78 + iket] );
1020
1021 HRR_INT__d_p_o_s[15 * 78 + iket] = HRR_INT__f_s_o_s[5 * 78 + iket] + ( hAB[0] * HRR_INT__d_s_o_s[5 * 78 + iket] );
1022
1023 HRR_INT__d_p_o_s[16 * 78 + iket] = HRR_INT__f_s_o_s[8 * 78 + iket] + ( hAB[1] * HRR_INT__d_s_o_s[5 * 78 + iket] );
1024
1025 HRR_INT__d_p_o_s[17 * 78 + iket] = HRR_INT__f_s_o_s[9 * 78 + iket] + ( hAB[2] * HRR_INT__d_s_o_s[5 * 78 + iket] );
1026
1027 }
1028
1029
1030 // form INT__f_p_i_s
1031 HRR_J_f_p(
1032 HRR_INT__f_p_i_s,
1033 HRR_INT__f_s_i_s,
1034 HRR_INT__g_s_i_s,
1035 hAB, 28);
1036
1037 // form INT__f_p_k_s
1038 HRR_J_f_p(
1039 HRR_INT__f_p_k_s,
1040 HRR_INT__f_s_k_s,
1041 HRR_INT__g_s_k_s,
1042 hAB, 36);
1043
1044 // form INT__f_p_l_s
1045 HRR_J_f_p(
1046 HRR_INT__f_p_l_s,
1047 HRR_INT__f_s_l_s,
1048 HRR_INT__g_s_l_s,
1049 hAB, 45);
1050
1051 // form INT__f_p_m_s
1052 HRR_J_f_p(
1053 HRR_INT__f_p_m_s,
1054 HRR_INT__f_s_m_s,
1055 HRR_INT__g_s_m_s,
1056 hAB, 55);
1057
1058 // form INT__f_p_n_s
1059 HRR_J_f_p(
1060 HRR_INT__f_p_n_s,
1061 HRR_INT__f_s_n_s,
1062 HRR_INT__g_s_n_s,
1063 hAB, 66);
1064
1065 // form INT__f_p_o_s
1066 HRR_J_f_p(
1067 HRR_INT__f_p_o_s,
1068 HRR_INT__f_s_o_s,
1069 HRR_INT__g_s_o_s,
1070 hAB, 78);
1071
1072 // form INT__d_d_i_s
1073 HRR_J_d_d(
1074 HRR_INT__d_d_i_s,
1075 HRR_INT__d_p_i_s,
1076 HRR_INT__f_p_i_s,
1077 hAB, 28);
1078
1079 // form INT__d_d_k_s
1080 HRR_J_d_d(
1081 HRR_INT__d_d_k_s,
1082 HRR_INT__d_p_k_s,
1083 HRR_INT__f_p_k_s,
1084 hAB, 36);
1085
1086 // form INT__d_d_l_s
1087 HRR_J_d_d(
1088 HRR_INT__d_d_l_s,
1089 HRR_INT__d_p_l_s,
1090 HRR_INT__f_p_l_s,
1091 hAB, 45);
1092
1093 // form INT__d_d_m_s
1094 HRR_J_d_d(
1095 HRR_INT__d_d_m_s,
1096 HRR_INT__d_p_m_s,
1097 HRR_INT__f_p_m_s,
1098 hAB, 55);
1099
1100 // form INT__d_d_n_s
1101 HRR_J_d_d(
1102 HRR_INT__d_d_n_s,
1103 HRR_INT__d_p_n_s,
1104 HRR_INT__f_p_n_s,
1105 hAB, 66);
1106
1107 // form INT__d_d_o_s
1108 HRR_J_d_d(
1109 HRR_INT__d_d_o_s,
1110 HRR_INT__d_p_o_s,
1111 HRR_INT__f_p_o_s,
1112 hAB, 78);
1113
1114 // form INT__d_d_i_p
1115 ostei_general_hrr_L(2, 2, 6, 1, hCD, HRR_INT__d_d_k_s, HRR_INT__d_d_i_s, HRR_INT__d_d_i_p);
1116
1117 // form INT__d_d_k_p
1118 ostei_general_hrr_L(2, 2, 7, 1, hCD, HRR_INT__d_d_l_s, HRR_INT__d_d_k_s, HRR_INT__d_d_k_p);
1119
1120 // form INT__d_d_l_p
1121 ostei_general_hrr_L(2, 2, 8, 1, hCD, HRR_INT__d_d_m_s, HRR_INT__d_d_l_s, HRR_INT__d_d_l_p);
1122
1123 // form INT__d_d_m_p
1124 ostei_general_hrr_L(2, 2, 9, 1, hCD, HRR_INT__d_d_n_s, HRR_INT__d_d_m_s, HRR_INT__d_d_m_p);
1125
1126 // form INT__d_d_n_p
1127 ostei_general_hrr_L(2, 2, 10, 1, hCD, HRR_INT__d_d_o_s, HRR_INT__d_d_n_s, HRR_INT__d_d_n_p);
1128
1129 // form INT__d_d_i_d
1130 ostei_general_hrr_L(2, 2, 6, 2, hCD, HRR_INT__d_d_k_p, HRR_INT__d_d_i_p, HRR_INT__d_d_i_d);
1131
1132 // form INT__d_d_k_d
1133 ostei_general_hrr_L(2, 2, 7, 2, hCD, HRR_INT__d_d_l_p, HRR_INT__d_d_k_p, HRR_INT__d_d_k_d);
1134
1135 // form INT__d_d_l_d
1136 ostei_general_hrr_L(2, 2, 8, 2, hCD, HRR_INT__d_d_m_p, HRR_INT__d_d_l_p, HRR_INT__d_d_l_d);
1137
1138 // form INT__d_d_m_d
1139 ostei_general_hrr_L(2, 2, 9, 2, hCD, HRR_INT__d_d_n_p, HRR_INT__d_d_m_p, HRR_INT__d_d_m_d);
1140
1141 // form INT__d_d_i_f
1142 ostei_general_hrr_L(2, 2, 6, 3, hCD, HRR_INT__d_d_k_d, HRR_INT__d_d_i_d, HRR_INT__d_d_i_f);
1143
1144 // form INT__d_d_k_f
1145 ostei_general_hrr_L(2, 2, 7, 3, hCD, HRR_INT__d_d_l_d, HRR_INT__d_d_k_d, HRR_INT__d_d_k_f);
1146
1147 // form INT__d_d_l_f
1148 ostei_general_hrr_L(2, 2, 8, 3, hCD, HRR_INT__d_d_m_d, HRR_INT__d_d_l_d, HRR_INT__d_d_l_f);
1149
1150 // form INT__d_d_i_g
1151 ostei_general_hrr_L(2, 2, 6, 4, hCD, HRR_INT__d_d_k_f, HRR_INT__d_d_i_f, HRR_INT__d_d_i_g);
1152
1153 // form INT__d_d_k_g
1154 ostei_general_hrr_L(2, 2, 7, 4, hCD, HRR_INT__d_d_l_f, HRR_INT__d_d_k_f, HRR_INT__d_d_k_g);
1155
1156 // form INT__d_d_i_h
1157 ostei_general_hrr_L(2, 2, 6, 5, hCD, HRR_INT__d_d_k_g, HRR_INT__d_d_i_g, HRR_INT__d_d_i_h);
1158
1159
1160 } // close HRR loop
1161
1162
1163 } // close loop cdbatch
1164
1165 istart = iend;
1166 } // close loop over ab
1167
1168 return P.nshell12_clip * Q.nshell12_clip;
1169 }
1170
ostei_d_d_h_i(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__d_d_h_i)1171 int ostei_d_d_h_i(struct simint_multi_shellpair const P,
1172 struct simint_multi_shellpair const Q,
1173 double screen_tol,
1174 double * const restrict work,
1175 double * const restrict INT__d_d_h_i)
1176 {
1177 double Q_AB[3*Q.nshell12];
1178 struct simint_multi_shellpair Q_tmp = Q;
1179 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1180 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1181 Q_tmp.AB_x = Q_AB;
1182 Q_tmp.AB_y = Q_AB + Q.nshell12;
1183 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1184
1185 for(int i = 0; i < Q.nshell12; i++)
1186 {
1187 Q_tmp.AB_x[i] = -Q.AB_x[i];
1188 Q_tmp.AB_y[i] = -Q.AB_y[i];
1189 Q_tmp.AB_z[i] = -Q.AB_z[i];
1190 }
1191
1192 int ret = ostei_d_d_i_h(P, Q_tmp, screen_tol, work, INT__d_d_h_i);
1193 double buffer[21168] SIMINT_ALIGN_ARRAY_DBL;
1194
1195 for(int q = 0; q < ret; q++)
1196 {
1197 int idx = 0;
1198 for(int a = 0; a < 6; ++a)
1199 for(int b = 0; b < 6; ++b)
1200 for(int c = 0; c < 21; ++c)
1201 for(int d = 0; d < 28; ++d)
1202 buffer[idx++] = INT__d_d_h_i[q*21168+a*3528+b*588+d*21+c];
1203
1204 memcpy(INT__d_d_h_i+q*21168, buffer, 21168*sizeof(double));
1205 }
1206
1207 return ret;
1208 }
1209
1210