1 #include "simint/boys/boys.h"
2 #include "simint/ostei/gen/ostei_generated.h"
3 #include "simint/vectorization/vectorization.h"
4 #include <math.h>
5 #include <string.h>
6
7
ostei_k_g_g_f(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__k_g_g_f)8 int ostei_k_g_g_f(struct simint_multi_shellpair const P,
9 struct simint_multi_shellpair const Q,
10 double screen_tol,
11 double * const restrict work,
12 double * const restrict INT__k_g_g_f)
13 {
14
15 SIMINT_ASSUME_ALIGN_DBL(work);
16 SIMINT_ASSUME_ALIGN_DBL(INT__k_g_g_f);
17 int ab, cd, abcd;
18 int istart, jstart;
19 int iprimcd, nprim_icd, icd;
20 const int check_screen = (screen_tol > 0.0);
21 int i, j;
22 int n;
23 int not_screened;
24 int real_abcd;
25 int iket;
26 int ibra;
27
28 // partition workspace
29 double * const INT__k_s_g_s = work + (SIMINT_NSHELL_SIMD * 0);
30 double * const INT__k_s_h_s = work + (SIMINT_NSHELL_SIMD * 540);
31 double * const INT__k_s_i_s = work + (SIMINT_NSHELL_SIMD * 1296);
32 double * const INT__k_s_k_s = work + (SIMINT_NSHELL_SIMD * 2304);
33 double * const INT__l_s_g_s = work + (SIMINT_NSHELL_SIMD * 3600);
34 double * const INT__l_s_h_s = work + (SIMINT_NSHELL_SIMD * 4275);
35 double * const INT__l_s_i_s = work + (SIMINT_NSHELL_SIMD * 5220);
36 double * const INT__l_s_k_s = work + (SIMINT_NSHELL_SIMD * 6480);
37 double * const INT__m_s_g_s = work + (SIMINT_NSHELL_SIMD * 8100);
38 double * const INT__m_s_h_s = work + (SIMINT_NSHELL_SIMD * 8925);
39 double * const INT__m_s_i_s = work + (SIMINT_NSHELL_SIMD * 10080);
40 double * const INT__m_s_k_s = work + (SIMINT_NSHELL_SIMD * 11620);
41 double * const INT__n_s_g_s = work + (SIMINT_NSHELL_SIMD * 13600);
42 double * const INT__n_s_h_s = work + (SIMINT_NSHELL_SIMD * 14590);
43 double * const INT__n_s_i_s = work + (SIMINT_NSHELL_SIMD * 15976);
44 double * const INT__n_s_k_s = work + (SIMINT_NSHELL_SIMD * 17824);
45 double * const INT__o_s_g_s = work + (SIMINT_NSHELL_SIMD * 20200);
46 double * const INT__o_s_h_s = work + (SIMINT_NSHELL_SIMD * 21370);
47 double * const INT__o_s_i_s = work + (SIMINT_NSHELL_SIMD * 23008);
48 double * const INT__o_s_k_s = work + (SIMINT_NSHELL_SIMD * 25192);
49 SIMINT_DBLTYPE * const primwork = (SIMINT_DBLTYPE *)(work + SIMINT_NSHELL_SIMD*28000);
50 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_s_s = primwork + 0;
51 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_s_s = primwork + 19;
52 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_p_s = primwork + 73;
53 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_s_s = primwork + 136;
54 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_p_s = primwork + 238;
55 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_d_s = primwork + 364;
56 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_s_s = primwork + 580;
57 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_p_s = primwork + 740;
58 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_d_s = primwork + 950;
59 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_f_s = primwork + 1310;
60 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_s_s = primwork + 1810;
61 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_p_s = primwork + 2035;
62 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_d_s = primwork + 2350;
63 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_f_s = primwork + 2890;
64 SIMINT_DBLTYPE * const restrict PRIM_INT__g_s_g_s = primwork + 3640;
65 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_s_s = primwork + 4540;
66 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_p_s = primwork + 4834;
67 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_d_s = primwork + 5275;
68 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_f_s = primwork + 6031;
69 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_g_s = primwork + 7081;
70 SIMINT_DBLTYPE * const restrict PRIM_INT__h_s_h_s = primwork + 8341;
71 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_s_s = primwork + 9664;
72 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_p_s = primwork + 10028;
73 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_d_s = primwork + 10616;
74 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_f_s = primwork + 11624;
75 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_g_s = primwork + 13024;
76 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_h_s = primwork + 14704;
77 SIMINT_DBLTYPE * const restrict PRIM_INT__i_s_i_s = primwork + 16468;
78 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_s_s = primwork + 18036;
79 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_p_s = primwork + 18468;
80 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_d_s = primwork + 19224;
81 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_f_s = primwork + 20520;
82 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_g_s = primwork + 22320;
83 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_h_s = primwork + 24480;
84 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_i_s = primwork + 26748;
85 SIMINT_DBLTYPE * const restrict PRIM_INT__k_s_k_s = primwork + 28764;
86 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_s_s = primwork + 30060;
87 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_p_s = primwork + 30555;
88 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_d_s = primwork + 31500;
89 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_f_s = primwork + 33120;
90 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_g_s = primwork + 35370;
91 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_h_s = primwork + 38070;
92 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_i_s = primwork + 40905;
93 SIMINT_DBLTYPE * const restrict PRIM_INT__l_s_k_s = primwork + 43425;
94 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_s_s = primwork + 45045;
95 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_p_s = primwork + 45595;
96 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_d_s = primwork + 46750;
97 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_f_s = primwork + 48730;
98 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_g_s = primwork + 51480;
99 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_h_s = primwork + 54780;
100 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_i_s = primwork + 58245;
101 SIMINT_DBLTYPE * const restrict PRIM_INT__m_s_k_s = primwork + 61325;
102 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_s_s = primwork + 63305;
103 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_p_s = primwork + 63899;
104 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_d_s = primwork + 65285;
105 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_f_s = primwork + 67661;
106 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_g_s = primwork + 70961;
107 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_h_s = primwork + 74921;
108 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_i_s = primwork + 79079;
109 SIMINT_DBLTYPE * const restrict PRIM_INT__n_s_k_s = primwork + 82775;
110 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_s_s = primwork + 85151;
111 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_p_s = primwork + 85775;
112 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_d_s = primwork + 87413;
113 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_f_s = primwork + 90221;
114 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_g_s = primwork + 94121;
115 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_h_s = primwork + 98801;
116 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_i_s = primwork + 103715;
117 SIMINT_DBLTYPE * const restrict PRIM_INT__o_s_k_s = primwork + 108083;
118 double * const hrrwork = (double *)(primwork + 110891);
119 double * const HRR_INT__k_p_g_s = hrrwork + 0;
120 double * const HRR_INT__k_p_h_s = hrrwork + 1620;
121 double * const HRR_INT__k_p_i_s = hrrwork + 3888;
122 double * const HRR_INT__k_p_k_s = hrrwork + 6912;
123 double * const HRR_INT__k_d_g_s = hrrwork + 10800;
124 double * const HRR_INT__k_d_h_s = hrrwork + 14040;
125 double * const HRR_INT__k_d_i_s = hrrwork + 18576;
126 double * const HRR_INT__k_d_k_s = hrrwork + 24624;
127 double * const HRR_INT__k_f_g_s = hrrwork + 32400;
128 double * const HRR_INT__k_f_h_s = hrrwork + 37800;
129 double * const HRR_INT__k_f_i_s = hrrwork + 45360;
130 double * const HRR_INT__k_f_k_s = hrrwork + 55440;
131 double * const HRR_INT__k_g_g_s = hrrwork + 68400;
132 double * const HRR_INT__k_g_g_p = hrrwork + 76500;
133 double * const HRR_INT__k_g_g_d = hrrwork + 100800;
134 double * const HRR_INT__k_g_h_s = hrrwork + 149400;
135 double * const HRR_INT__k_g_h_p = hrrwork + 160740;
136 double * const HRR_INT__k_g_h_d = hrrwork + 194760;
137 double * const HRR_INT__k_g_i_s = hrrwork + 262800;
138 double * const HRR_INT__k_g_i_p = hrrwork + 277920;
139 double * const HRR_INT__k_g_k_s = hrrwork + 323280;
140 double * const HRR_INT__l_p_g_s = hrrwork + 342720;
141 double * const HRR_INT__l_p_h_s = hrrwork + 344745;
142 double * const HRR_INT__l_p_i_s = hrrwork + 347580;
143 double * const HRR_INT__l_p_k_s = hrrwork + 351360;
144 double * const HRR_INT__l_d_g_s = hrrwork + 356220;
145 double * const HRR_INT__l_d_h_s = hrrwork + 360270;
146 double * const HRR_INT__l_d_i_s = hrrwork + 365940;
147 double * const HRR_INT__l_d_k_s = hrrwork + 373500;
148 double * const HRR_INT__l_f_g_s = hrrwork + 383220;
149 double * const HRR_INT__l_f_h_s = hrrwork + 389970;
150 double * const HRR_INT__l_f_i_s = hrrwork + 399420;
151 double * const HRR_INT__l_f_k_s = hrrwork + 412020;
152 double * const HRR_INT__m_p_g_s = hrrwork + 428220;
153 double * const HRR_INT__m_p_h_s = hrrwork + 430695;
154 double * const HRR_INT__m_p_i_s = hrrwork + 434160;
155 double * const HRR_INT__m_p_k_s = hrrwork + 438780;
156 double * const HRR_INT__m_d_g_s = hrrwork + 444720;
157 double * const HRR_INT__m_d_h_s = hrrwork + 449670;
158 double * const HRR_INT__m_d_i_s = hrrwork + 456600;
159 double * const HRR_INT__m_d_k_s = hrrwork + 465840;
160 double * const HRR_INT__n_p_g_s = hrrwork + 477720;
161 double * const HRR_INT__n_p_h_s = hrrwork + 480690;
162 double * const HRR_INT__n_p_i_s = hrrwork + 484848;
163 double * const HRR_INT__n_p_k_s = hrrwork + 490392;
164
165
166 // Create constants
167 const SIMINT_DBLTYPE const_1 = SIMINT_DBLSET1(1);
168 const SIMINT_DBLTYPE const_10 = SIMINT_DBLSET1(10);
169 const SIMINT_DBLTYPE const_11 = SIMINT_DBLSET1(11);
170 const SIMINT_DBLTYPE const_2 = SIMINT_DBLSET1(2);
171 const SIMINT_DBLTYPE const_3 = SIMINT_DBLSET1(3);
172 const SIMINT_DBLTYPE const_4 = SIMINT_DBLSET1(4);
173 const SIMINT_DBLTYPE const_5 = SIMINT_DBLSET1(5);
174 const SIMINT_DBLTYPE const_6 = SIMINT_DBLSET1(6);
175 const SIMINT_DBLTYPE const_7 = SIMINT_DBLSET1(7);
176 const SIMINT_DBLTYPE const_8 = SIMINT_DBLSET1(8);
177 const SIMINT_DBLTYPE const_9 = SIMINT_DBLSET1(9);
178 const SIMINT_DBLTYPE one_half = SIMINT_DBLSET1(0.5);
179
180
181 ////////////////////////////////////////
182 // Loop over shells and primitives
183 ////////////////////////////////////////
184
185 real_abcd = 0;
186 istart = 0;
187 for(ab = 0; ab < P.nshell12_clip; ++ab)
188 {
189 const int iend = istart + P.nprim12[ab];
190
191 cd = 0;
192 jstart = 0;
193
194 for(cd = 0; cd < Q.nshell12_clip; cd += SIMINT_NSHELL_SIMD)
195 {
196 const int nshellbatch = ((cd + SIMINT_NSHELL_SIMD) > Q.nshell12_clip) ? Q.nshell12_clip - cd : SIMINT_NSHELL_SIMD;
197 int jend = jstart;
198 for(i = 0; i < nshellbatch; i++)
199 jend += Q.nprim12[cd+i];
200
201 // Clear the beginning of the workspace (where we are accumulating integrals)
202 memset(work, 0, SIMINT_NSHELL_SIMD * 28000 * sizeof(double));
203 abcd = 0;
204
205
206 for(i = istart; i < iend; ++i)
207 {
208 SIMINT_DBLTYPE bra_screen_max; // only used if check_screen
209
210 if(check_screen)
211 {
212 // Skip this whole thing if always insignificant
213 if((P.screen[i] * Q.screen_max) < screen_tol)
214 continue;
215 bra_screen_max = SIMINT_DBLSET1(P.screen[i]);
216 }
217
218 icd = 0;
219 iprimcd = 0;
220 nprim_icd = Q.nprim12[cd];
221 double * restrict PRIM_PTR_INT__k_s_g_s = INT__k_s_g_s + abcd * 540;
222 double * restrict PRIM_PTR_INT__k_s_h_s = INT__k_s_h_s + abcd * 756;
223 double * restrict PRIM_PTR_INT__k_s_i_s = INT__k_s_i_s + abcd * 1008;
224 double * restrict PRIM_PTR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
225 double * restrict PRIM_PTR_INT__l_s_g_s = INT__l_s_g_s + abcd * 675;
226 double * restrict PRIM_PTR_INT__l_s_h_s = INT__l_s_h_s + abcd * 945;
227 double * restrict PRIM_PTR_INT__l_s_i_s = INT__l_s_i_s + abcd * 1260;
228 double * restrict PRIM_PTR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
229 double * restrict PRIM_PTR_INT__m_s_g_s = INT__m_s_g_s + abcd * 825;
230 double * restrict PRIM_PTR_INT__m_s_h_s = INT__m_s_h_s + abcd * 1155;
231 double * restrict PRIM_PTR_INT__m_s_i_s = INT__m_s_i_s + abcd * 1540;
232 double * restrict PRIM_PTR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
233 double * restrict PRIM_PTR_INT__n_s_g_s = INT__n_s_g_s + abcd * 990;
234 double * restrict PRIM_PTR_INT__n_s_h_s = INT__n_s_h_s + abcd * 1386;
235 double * restrict PRIM_PTR_INT__n_s_i_s = INT__n_s_i_s + abcd * 1848;
236 double * restrict PRIM_PTR_INT__n_s_k_s = INT__n_s_k_s + abcd * 2376;
237 double * restrict PRIM_PTR_INT__o_s_g_s = INT__o_s_g_s + abcd * 1170;
238 double * restrict PRIM_PTR_INT__o_s_h_s = INT__o_s_h_s + abcd * 1638;
239 double * restrict PRIM_PTR_INT__o_s_i_s = INT__o_s_i_s + abcd * 2184;
240 double * restrict PRIM_PTR_INT__o_s_k_s = INT__o_s_k_s + abcd * 2808;
241
242
243
244 // Load these one per loop over i
245 const SIMINT_DBLTYPE P_alpha = SIMINT_DBLSET1(P.alpha[i]);
246 const SIMINT_DBLTYPE P_prefac = SIMINT_DBLSET1(P.prefac[i]);
247 const SIMINT_DBLTYPE Pxyz[3] = { SIMINT_DBLSET1(P.x[i]), SIMINT_DBLSET1(P.y[i]), SIMINT_DBLSET1(P.z[i]) };
248
249 const SIMINT_DBLTYPE P_PA[3] = { SIMINT_DBLSET1(P.PA_x[i]), SIMINT_DBLSET1(P.PA_y[i]), SIMINT_DBLSET1(P.PA_z[i]) };
250
251 for(j = jstart; j < jend; j += SIMINT_SIMD_LEN)
252 {
253 // calculate the shell offsets
254 // these are the offset from the shell pointed to by cd
255 // for each element
256 int shelloffsets[SIMINT_SIMD_LEN] = {0};
257 int lastoffset = 0;
258 const int nlane = ( ((j + SIMINT_SIMD_LEN) < jend) ? SIMINT_SIMD_LEN : (jend - j));
259
260 if((iprimcd + SIMINT_SIMD_LEN) >= nprim_icd)
261 {
262 // Handle if the first element of the vector is a new shell
263 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
264 {
265 nprim_icd += Q.nprim12[cd + (++icd)];
266 PRIM_PTR_INT__k_s_g_s += 540;
267 PRIM_PTR_INT__k_s_h_s += 756;
268 PRIM_PTR_INT__k_s_i_s += 1008;
269 PRIM_PTR_INT__k_s_k_s += 1296;
270 PRIM_PTR_INT__l_s_g_s += 675;
271 PRIM_PTR_INT__l_s_h_s += 945;
272 PRIM_PTR_INT__l_s_i_s += 1260;
273 PRIM_PTR_INT__l_s_k_s += 1620;
274 PRIM_PTR_INT__m_s_g_s += 825;
275 PRIM_PTR_INT__m_s_h_s += 1155;
276 PRIM_PTR_INT__m_s_i_s += 1540;
277 PRIM_PTR_INT__m_s_k_s += 1980;
278 PRIM_PTR_INT__n_s_g_s += 990;
279 PRIM_PTR_INT__n_s_h_s += 1386;
280 PRIM_PTR_INT__n_s_i_s += 1848;
281 PRIM_PTR_INT__n_s_k_s += 2376;
282 PRIM_PTR_INT__o_s_g_s += 1170;
283 PRIM_PTR_INT__o_s_h_s += 1638;
284 PRIM_PTR_INT__o_s_i_s += 2184;
285 PRIM_PTR_INT__o_s_k_s += 2808;
286 }
287 iprimcd++;
288 for(n = 1; n < SIMINT_SIMD_LEN; ++n)
289 {
290 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
291 {
292 shelloffsets[n] = shelloffsets[n-1] + 1;
293 lastoffset++;
294 nprim_icd += Q.nprim12[cd + (++icd)];
295 }
296 else
297 shelloffsets[n] = shelloffsets[n-1];
298 iprimcd++;
299 }
300 }
301 else
302 iprimcd += SIMINT_SIMD_LEN;
303
304 // Do we have to compute this vector (or has it been screened out)?
305 // (not_screened != 0 means we have to do this vector)
306 if(check_screen)
307 {
308 const double vmax = vector_max(SIMINT_MUL(bra_screen_max, SIMINT_DBLLOAD(Q.screen, j)));
309 if(vmax < screen_tol)
310 {
311 PRIM_PTR_INT__k_s_g_s += lastoffset*540;
312 PRIM_PTR_INT__k_s_h_s += lastoffset*756;
313 PRIM_PTR_INT__k_s_i_s += lastoffset*1008;
314 PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
315 PRIM_PTR_INT__l_s_g_s += lastoffset*675;
316 PRIM_PTR_INT__l_s_h_s += lastoffset*945;
317 PRIM_PTR_INT__l_s_i_s += lastoffset*1260;
318 PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
319 PRIM_PTR_INT__m_s_g_s += lastoffset*825;
320 PRIM_PTR_INT__m_s_h_s += lastoffset*1155;
321 PRIM_PTR_INT__m_s_i_s += lastoffset*1540;
322 PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
323 PRIM_PTR_INT__n_s_g_s += lastoffset*990;
324 PRIM_PTR_INT__n_s_h_s += lastoffset*1386;
325 PRIM_PTR_INT__n_s_i_s += lastoffset*1848;
326 PRIM_PTR_INT__n_s_k_s += lastoffset*2376;
327 PRIM_PTR_INT__o_s_g_s += lastoffset*1170;
328 PRIM_PTR_INT__o_s_h_s += lastoffset*1638;
329 PRIM_PTR_INT__o_s_i_s += lastoffset*2184;
330 PRIM_PTR_INT__o_s_k_s += lastoffset*2808;
331 continue;
332 }
333 }
334
335 const SIMINT_DBLTYPE Q_alpha = SIMINT_DBLLOAD(Q.alpha, j);
336 const SIMINT_DBLTYPE PQalpha_mul = SIMINT_MUL(P_alpha, Q_alpha);
337 const SIMINT_DBLTYPE PQalpha_sum = SIMINT_ADD(P_alpha, Q_alpha);
338 const SIMINT_DBLTYPE one_over_PQalpha_sum = SIMINT_DIV(const_1, PQalpha_sum);
339
340
341 /* construct R2 = (Px - Qx)**2 + (Py - Qy)**2 + (Pz -Qz)**2 */
342 SIMINT_DBLTYPE PQ[3];
343 PQ[0] = SIMINT_SUB(Pxyz[0], SIMINT_DBLLOAD(Q.x, j));
344 PQ[1] = SIMINT_SUB(Pxyz[1], SIMINT_DBLLOAD(Q.y, j));
345 PQ[2] = SIMINT_SUB(Pxyz[2], SIMINT_DBLLOAD(Q.z, j));
346 SIMINT_DBLTYPE R2 = SIMINT_MUL(PQ[0], PQ[0]);
347 R2 = SIMINT_FMADD(PQ[1], PQ[1], R2);
348 R2 = SIMINT_FMADD(PQ[2], PQ[2], R2);
349
350 const SIMINT_DBLTYPE alpha = SIMINT_MUL(PQalpha_mul, one_over_PQalpha_sum); // alpha from MEST
351 const SIMINT_DBLTYPE one_over_p = SIMINT_DIV(const_1, P_alpha);
352 const SIMINT_DBLTYPE one_over_q = SIMINT_DIV(const_1, Q_alpha);
353 const SIMINT_DBLTYPE one_over_2p = SIMINT_MUL(one_half, one_over_p);
354 const SIMINT_DBLTYPE one_over_2q = SIMINT_MUL(one_half, one_over_q);
355 const SIMINT_DBLTYPE one_over_2pq = SIMINT_MUL(one_half, one_over_PQalpha_sum);
356 const SIMINT_DBLTYPE Q_PA[3] = { SIMINT_DBLLOAD(Q.PA_x, j), SIMINT_DBLLOAD(Q.PA_y, j), SIMINT_DBLLOAD(Q.PA_z, j) };
357
358 // NOTE: Minus sign!
359 const SIMINT_DBLTYPE a_over_p = SIMINT_MUL(SIMINT_NEG(alpha), one_over_p);
360 SIMINT_DBLTYPE aop_PQ[3];
361 aop_PQ[0] = SIMINT_MUL(a_over_p, PQ[0]);
362 aop_PQ[1] = SIMINT_MUL(a_over_p, PQ[1]);
363 aop_PQ[2] = SIMINT_MUL(a_over_p, PQ[2]);
364
365 SIMINT_DBLTYPE a_over_q = SIMINT_MUL(alpha, one_over_q);
366 SIMINT_DBLTYPE aoq_PQ[3];
367 aoq_PQ[0] = SIMINT_MUL(a_over_q, PQ[0]);
368 aoq_PQ[1] = SIMINT_MUL(a_over_q, PQ[1]);
369 aoq_PQ[2] = SIMINT_MUL(a_over_q, PQ[2]);
370 // Put a minus sign here so we don't have to in RR routines
371 a_over_q = SIMINT_NEG(a_over_q);
372
373
374 //////////////////////////////////////////////
375 // Fjt function section
376 // Maximum v value: 18
377 //////////////////////////////////////////////
378 // The parameter to the Fjt function
379 const SIMINT_DBLTYPE F_x = SIMINT_MUL(R2, alpha);
380
381
382 const SIMINT_DBLTYPE Q_prefac = mask_load(nlane, Q.prefac + j);
383
384
385 boys_F_split(PRIM_INT__s_s_s_s, F_x, 18);
386 SIMINT_DBLTYPE prefac = SIMINT_SQRT(one_over_PQalpha_sum);
387 prefac = SIMINT_MUL(SIMINT_MUL(P_prefac, Q_prefac), prefac);
388 for(n = 0; n <= 18; n++)
389 PRIM_INT__s_s_s_s[n] = SIMINT_MUL(PRIM_INT__s_s_s_s[n], prefac);
390
391 //////////////////////////////////////////////
392 // Primitive integrals: Vertical recurrance
393 //////////////////////////////////////////////
394
395 const SIMINT_DBLTYPE vrr_const_1_over_2p = one_over_2p;
396 const SIMINT_DBLTYPE vrr_const_2_over_2p = SIMINT_MUL(const_2, one_over_2p);
397 const SIMINT_DBLTYPE vrr_const_3_over_2p = SIMINT_MUL(const_3, one_over_2p);
398 const SIMINT_DBLTYPE vrr_const_4_over_2p = SIMINT_MUL(const_4, one_over_2p);
399 const SIMINT_DBLTYPE vrr_const_5_over_2p = SIMINT_MUL(const_5, one_over_2p);
400 const SIMINT_DBLTYPE vrr_const_6_over_2p = SIMINT_MUL(const_6, one_over_2p);
401 const SIMINT_DBLTYPE vrr_const_7_over_2p = SIMINT_MUL(const_7, one_over_2p);
402 const SIMINT_DBLTYPE vrr_const_8_over_2p = SIMINT_MUL(const_8, one_over_2p);
403 const SIMINT_DBLTYPE vrr_const_9_over_2p = SIMINT_MUL(const_9, one_over_2p);
404 const SIMINT_DBLTYPE vrr_const_10_over_2p = SIMINT_MUL(const_10, one_over_2p);
405 const SIMINT_DBLTYPE vrr_const_1_over_2q = one_over_2q;
406 const SIMINT_DBLTYPE vrr_const_2_over_2q = SIMINT_MUL(const_2, one_over_2q);
407 const SIMINT_DBLTYPE vrr_const_3_over_2q = SIMINT_MUL(const_3, one_over_2q);
408 const SIMINT_DBLTYPE vrr_const_4_over_2q = SIMINT_MUL(const_4, one_over_2q);
409 const SIMINT_DBLTYPE vrr_const_5_over_2q = SIMINT_MUL(const_5, one_over_2q);
410 const SIMINT_DBLTYPE vrr_const_6_over_2q = SIMINT_MUL(const_6, one_over_2q);
411 const SIMINT_DBLTYPE vrr_const_1_over_2pq = one_over_2pq;
412 const SIMINT_DBLTYPE vrr_const_2_over_2pq = SIMINT_MUL(const_2, one_over_2pq);
413 const SIMINT_DBLTYPE vrr_const_3_over_2pq = SIMINT_MUL(const_3, one_over_2pq);
414 const SIMINT_DBLTYPE vrr_const_4_over_2pq = SIMINT_MUL(const_4, one_over_2pq);
415 const SIMINT_DBLTYPE vrr_const_5_over_2pq = SIMINT_MUL(const_5, one_over_2pq);
416 const SIMINT_DBLTYPE vrr_const_6_over_2pq = SIMINT_MUL(const_6, one_over_2pq);
417 const SIMINT_DBLTYPE vrr_const_7_over_2pq = SIMINT_MUL(const_7, one_over_2pq);
418 const SIMINT_DBLTYPE vrr_const_8_over_2pq = SIMINT_MUL(const_8, one_over_2pq);
419 const SIMINT_DBLTYPE vrr_const_9_over_2pq = SIMINT_MUL(const_9, one_over_2pq);
420 const SIMINT_DBLTYPE vrr_const_10_over_2pq = SIMINT_MUL(const_10, one_over_2pq);
421 const SIMINT_DBLTYPE vrr_const_11_over_2pq = SIMINT_MUL(const_11, one_over_2pq);
422
423
424
425 // Forming PRIM_INT__p_s_s_s[18 * 3];
426 for(n = 0; n < 18; ++n) // loop over orders of auxiliary function
427 {
428
429 PRIM_INT__p_s_s_s[n * 3 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
430 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]);
431
432 PRIM_INT__p_s_s_s[n * 3 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
433 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]);
434
435 PRIM_INT__p_s_s_s[n * 3 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
436 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]);
437
438 }
439
440
441
442 // Forming PRIM_INT__d_s_s_s[17 * 6];
443 for(n = 0; n < 17; ++n) // loop over orders of auxiliary function
444 {
445
446 PRIM_INT__d_s_s_s[n * 6 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
447 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]);
448 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]);
449
450 PRIM_INT__d_s_s_s[n * 6 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
451 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]);
452
453 PRIM_INT__d_s_s_s[n * 6 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
454 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]);
455
456 PRIM_INT__d_s_s_s[n * 6 + 3] = SIMINT_MUL(P_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
457 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]);
458 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]);
459
460 PRIM_INT__d_s_s_s[n * 6 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
461 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]);
462
463 PRIM_INT__d_s_s_s[n * 6 + 5] = SIMINT_MUL(P_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
464 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]);
465 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]);
466
467 }
468
469
470
471 // Forming PRIM_INT__f_s_s_s[16 * 10];
472 for(n = 0; n < 16; ++n) // loop over orders of auxiliary function
473 {
474
475 PRIM_INT__f_s_s_s[n * 10 + 0] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
476 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]);
477 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]);
478
479 PRIM_INT__f_s_s_s[n * 10 + 1] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
480 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]);
481
482 PRIM_INT__f_s_s_s[n * 10 + 2] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
483 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]);
484
485 PRIM_INT__f_s_s_s[n * 10 + 3] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
486 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]);
487
488 PRIM_INT__f_s_s_s[n * 10 + 4] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
489 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]);
490
491 PRIM_INT__f_s_s_s[n * 10 + 5] = SIMINT_MUL(P_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
492 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]);
493
494 PRIM_INT__f_s_s_s[n * 10 + 6] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
495 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]);
496 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]);
497
498 PRIM_INT__f_s_s_s[n * 10 + 7] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
499 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]);
500
501 PRIM_INT__f_s_s_s[n * 10 + 8] = SIMINT_MUL(P_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
502 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]);
503
504 PRIM_INT__f_s_s_s[n * 10 + 9] = SIMINT_MUL(P_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
505 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]);
506 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]);
507
508 }
509
510
511 VRR_I_g_s_s_s(
512 PRIM_INT__g_s_s_s,
513 PRIM_INT__f_s_s_s,
514 PRIM_INT__d_s_s_s,
515 P_PA,
516 a_over_p,
517 aop_PQ,
518 one_over_2p,
519 15);
520
521
522 VRR_I_h_s_s_s(
523 PRIM_INT__h_s_s_s,
524 PRIM_INT__g_s_s_s,
525 PRIM_INT__f_s_s_s,
526 P_PA,
527 a_over_p,
528 aop_PQ,
529 one_over_2p,
530 14);
531
532
533 ostei_general_vrr1_I(6, 13,
534 one_over_2p, a_over_p, aop_PQ, P_PA,
535 PRIM_INT__h_s_s_s, PRIM_INT__g_s_s_s, PRIM_INT__i_s_s_s);
536
537
538 ostei_general_vrr1_I(7, 12,
539 one_over_2p, a_over_p, aop_PQ, P_PA,
540 PRIM_INT__i_s_s_s, PRIM_INT__h_s_s_s, PRIM_INT__k_s_s_s);
541
542
543 ostei_general_vrr_K(7, 0, 1, 0, 7,
544 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
545 PRIM_INT__k_s_s_s, NULL, NULL, PRIM_INT__i_s_s_s, NULL, PRIM_INT__k_s_p_s);
546
547
548 ostei_general_vrr_K(6, 0, 1, 0, 7,
549 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
550 PRIM_INT__i_s_s_s, NULL, NULL, PRIM_INT__h_s_s_s, NULL, PRIM_INT__i_s_p_s);
551
552
553 ostei_general_vrr_K(7, 0, 2, 0, 6,
554 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
555 PRIM_INT__k_s_p_s, PRIM_INT__k_s_s_s, NULL, PRIM_INT__i_s_p_s, NULL, PRIM_INT__k_s_d_s);
556
557
558 ostei_general_vrr_K(5, 0, 1, 0, 7,
559 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
560 PRIM_INT__h_s_s_s, NULL, NULL, PRIM_INT__g_s_s_s, NULL, PRIM_INT__h_s_p_s);
561
562
563 ostei_general_vrr_K(6, 0, 2, 0, 6,
564 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
565 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);
566
567
568 ostei_general_vrr_K(7, 0, 3, 0, 5,
569 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
570 PRIM_INT__k_s_d_s, PRIM_INT__k_s_p_s, NULL, PRIM_INT__i_s_d_s, NULL, PRIM_INT__k_s_f_s);
571
572
573 VRR_K_g_s_p_s(
574 PRIM_INT__g_s_p_s,
575 PRIM_INT__g_s_s_s,
576 PRIM_INT__f_s_s_s,
577 Q_PA,
578 aoq_PQ,
579 one_over_2pq,
580 7);
581
582
583 ostei_general_vrr_K(5, 0, 2, 0, 6,
584 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
585 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);
586
587
588 ostei_general_vrr_K(6, 0, 3, 0, 5,
589 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
590 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);
591
592
593 ostei_general_vrr_K(7, 0, 4, 0, 4,
594 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
595 PRIM_INT__k_s_f_s, PRIM_INT__k_s_d_s, NULL, PRIM_INT__i_s_f_s, NULL, PRIM_INT__k_s_g_s);
596
597
598 VRR_K_f_s_p_s(
599 PRIM_INT__f_s_p_s,
600 PRIM_INT__f_s_s_s,
601 PRIM_INT__d_s_s_s,
602 Q_PA,
603 aoq_PQ,
604 one_over_2pq,
605 7);
606
607
608 ostei_general_vrr_K(4, 0, 2, 0, 6,
609 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
610 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);
611
612
613 ostei_general_vrr_K(5, 0, 3, 0, 5,
614 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
615 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);
616
617
618 ostei_general_vrr_K(6, 0, 4, 0, 4,
619 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
620 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);
621
622
623 ostei_general_vrr_K(7, 0, 5, 0, 3,
624 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
625 PRIM_INT__k_s_g_s, PRIM_INT__k_s_f_s, NULL, PRIM_INT__i_s_g_s, NULL, PRIM_INT__k_s_h_s);
626
627
628 ostei_general_vrr1_I(8, 11,
629 one_over_2p, a_over_p, aop_PQ, P_PA,
630 PRIM_INT__k_s_s_s, PRIM_INT__i_s_s_s, PRIM_INT__l_s_s_s);
631
632
633 ostei_general_vrr_K(8, 0, 1, 0, 7,
634 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
635 PRIM_INT__l_s_s_s, NULL, NULL, PRIM_INT__k_s_s_s, NULL, PRIM_INT__l_s_p_s);
636
637
638 ostei_general_vrr_K(8, 0, 2, 0, 6,
639 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
640 PRIM_INT__l_s_p_s, PRIM_INT__l_s_s_s, NULL, PRIM_INT__k_s_p_s, NULL, PRIM_INT__l_s_d_s);
641
642
643 ostei_general_vrr_K(8, 0, 3, 0, 5,
644 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
645 PRIM_INT__l_s_d_s, PRIM_INT__l_s_p_s, NULL, PRIM_INT__k_s_d_s, NULL, PRIM_INT__l_s_f_s);
646
647
648 ostei_general_vrr_K(8, 0, 4, 0, 4,
649 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
650 PRIM_INT__l_s_f_s, PRIM_INT__l_s_d_s, NULL, PRIM_INT__k_s_f_s, NULL, PRIM_INT__l_s_g_s);
651
652
653
654 // Forming PRIM_INT__d_s_p_s[7 * 18];
655 for(n = 0; n < 7; ++n) // loop over orders of auxiliary function
656 {
657
658 PRIM_INT__d_s_p_s[n * 18 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 0]);
659 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]);
660 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]);
661
662 PRIM_INT__d_s_p_s[n * 18 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 0]);
663 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]);
664
665 PRIM_INT__d_s_p_s[n * 18 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 0]);
666 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]);
667
668 PRIM_INT__d_s_p_s[n * 18 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 1]);
669 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]);
670 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]);
671
672 PRIM_INT__d_s_p_s[n * 18 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 1]);
673 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]);
674 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]);
675
676 PRIM_INT__d_s_p_s[n * 18 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 1]);
677 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]);
678
679 PRIM_INT__d_s_p_s[n * 18 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 2]);
680 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]);
681 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]);
682
683 PRIM_INT__d_s_p_s[n * 18 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 2]);
684 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]);
685
686 PRIM_INT__d_s_p_s[n * 18 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 2]);
687 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]);
688 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]);
689
690 PRIM_INT__d_s_p_s[n * 18 + 9] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 3]);
691 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]);
692
693 PRIM_INT__d_s_p_s[n * 18 + 10] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 3]);
694 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]);
695 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]);
696
697 PRIM_INT__d_s_p_s[n * 18 + 11] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 3]);
698 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]);
699
700 PRIM_INT__d_s_p_s[n * 18 + 12] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 4]);
701 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]);
702
703 PRIM_INT__d_s_p_s[n * 18 + 13] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 4]);
704 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]);
705 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]);
706
707 PRIM_INT__d_s_p_s[n * 18 + 14] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 4]);
708 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]);
709 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]);
710
711 PRIM_INT__d_s_p_s[n * 18 + 15] = SIMINT_MUL(Q_PA[0], PRIM_INT__d_s_s_s[n * 6 + 5]);
712 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]);
713
714 PRIM_INT__d_s_p_s[n * 18 + 16] = SIMINT_MUL(Q_PA[1], PRIM_INT__d_s_s_s[n * 6 + 5]);
715 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]);
716
717 PRIM_INT__d_s_p_s[n * 18 + 17] = SIMINT_MUL(Q_PA[2], PRIM_INT__d_s_s_s[n * 6 + 5]);
718 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]);
719 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]);
720
721 }
722
723
724 VRR_K_f_s_d_s(
725 PRIM_INT__f_s_d_s,
726 PRIM_INT__f_s_p_s,
727 PRIM_INT__f_s_s_s,
728 PRIM_INT__d_s_p_s,
729 Q_PA,
730 a_over_q,
731 aoq_PQ,
732 one_over_2pq,
733 one_over_2q,
734 6);
735
736
737 ostei_general_vrr_K(4, 0, 3, 0, 5,
738 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
739 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);
740
741
742 ostei_general_vrr_K(5, 0, 4, 0, 4,
743 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
744 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);
745
746
747 ostei_general_vrr_K(6, 0, 5, 0, 3,
748 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
749 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);
750
751
752 ostei_general_vrr_K(7, 0, 6, 0, 2,
753 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
754 PRIM_INT__k_s_h_s, PRIM_INT__k_s_g_s, NULL, PRIM_INT__i_s_h_s, NULL, PRIM_INT__k_s_i_s);
755
756
757 ostei_general_vrr_K(8, 0, 5, 0, 3,
758 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
759 PRIM_INT__l_s_g_s, PRIM_INT__l_s_f_s, NULL, PRIM_INT__k_s_g_s, NULL, PRIM_INT__l_s_h_s);
760
761
762 ostei_general_vrr1_I(9, 10,
763 one_over_2p, a_over_p, aop_PQ, P_PA,
764 PRIM_INT__l_s_s_s, PRIM_INT__k_s_s_s, PRIM_INT__m_s_s_s);
765
766
767 ostei_general_vrr_K(9, 0, 1, 0, 7,
768 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
769 PRIM_INT__m_s_s_s, NULL, NULL, PRIM_INT__l_s_s_s, NULL, PRIM_INT__m_s_p_s);
770
771
772 ostei_general_vrr_K(9, 0, 2, 0, 6,
773 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
774 PRIM_INT__m_s_p_s, PRIM_INT__m_s_s_s, NULL, PRIM_INT__l_s_p_s, NULL, PRIM_INT__m_s_d_s);
775
776
777 ostei_general_vrr_K(9, 0, 3, 0, 5,
778 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
779 PRIM_INT__m_s_d_s, PRIM_INT__m_s_p_s, NULL, PRIM_INT__l_s_d_s, NULL, PRIM_INT__m_s_f_s);
780
781
782 ostei_general_vrr_K(9, 0, 4, 0, 4,
783 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
784 PRIM_INT__m_s_f_s, PRIM_INT__m_s_d_s, NULL, PRIM_INT__l_s_f_s, NULL, PRIM_INT__m_s_g_s);
785
786
787
788 // Forming PRIM_INT__p_s_p_s[7 * 9];
789 for(n = 0; n < 7; ++n) // loop over orders of auxiliary function
790 {
791
792 PRIM_INT__p_s_p_s[n * 9 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 0]);
793 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]);
794 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]);
795
796 PRIM_INT__p_s_p_s[n * 9 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 0]);
797 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]);
798
799 PRIM_INT__p_s_p_s[n * 9 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 0]);
800 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]);
801
802 PRIM_INT__p_s_p_s[n * 9 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 1]);
803 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]);
804
805 PRIM_INT__p_s_p_s[n * 9 + 4] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 1]);
806 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]);
807 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]);
808
809 PRIM_INT__p_s_p_s[n * 9 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 1]);
810 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]);
811
812 PRIM_INT__p_s_p_s[n * 9 + 6] = SIMINT_MUL(Q_PA[0], PRIM_INT__p_s_s_s[n * 3 + 2]);
813 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]);
814
815 PRIM_INT__p_s_p_s[n * 9 + 7] = SIMINT_MUL(Q_PA[1], PRIM_INT__p_s_s_s[n * 3 + 2]);
816 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]);
817
818 PRIM_INT__p_s_p_s[n * 9 + 8] = SIMINT_MUL(Q_PA[2], PRIM_INT__p_s_s_s[n * 3 + 2]);
819 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]);
820 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]);
821
822 }
823
824
825 VRR_K_d_s_d_s(
826 PRIM_INT__d_s_d_s,
827 PRIM_INT__d_s_p_s,
828 PRIM_INT__d_s_s_s,
829 PRIM_INT__p_s_p_s,
830 Q_PA,
831 a_over_q,
832 aoq_PQ,
833 one_over_2pq,
834 one_over_2q,
835 6);
836
837
838 ostei_general_vrr_K(3, 0, 3, 0, 5,
839 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
840 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);
841
842
843 ostei_general_vrr_K(4, 0, 4, 0, 4,
844 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
845 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);
846
847
848 ostei_general_vrr_K(5, 0, 5, 0, 3,
849 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
850 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);
851
852
853 ostei_general_vrr_K(6, 0, 6, 0, 2,
854 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
855 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);
856
857
858 ostei_general_vrr_K(7, 0, 7, 0, 1,
859 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
860 PRIM_INT__k_s_i_s, PRIM_INT__k_s_h_s, NULL, PRIM_INT__i_s_i_s, NULL, PRIM_INT__k_s_k_s);
861
862
863 ostei_general_vrr_K(8, 0, 6, 0, 2,
864 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
865 PRIM_INT__l_s_h_s, PRIM_INT__l_s_g_s, NULL, PRIM_INT__k_s_h_s, NULL, PRIM_INT__l_s_i_s);
866
867
868 ostei_general_vrr_K(9, 0, 5, 0, 3,
869 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
870 PRIM_INT__m_s_g_s, PRIM_INT__m_s_f_s, NULL, PRIM_INT__l_s_g_s, NULL, PRIM_INT__m_s_h_s);
871
872
873 ostei_general_vrr1_I(10, 9,
874 one_over_2p, a_over_p, aop_PQ, P_PA,
875 PRIM_INT__m_s_s_s, PRIM_INT__l_s_s_s, PRIM_INT__n_s_s_s);
876
877
878 ostei_general_vrr_K(10, 0, 1, 0, 7,
879 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
880 PRIM_INT__n_s_s_s, NULL, NULL, PRIM_INT__m_s_s_s, NULL, PRIM_INT__n_s_p_s);
881
882
883 ostei_general_vrr_K(10, 0, 2, 0, 6,
884 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
885 PRIM_INT__n_s_p_s, PRIM_INT__n_s_s_s, NULL, PRIM_INT__m_s_p_s, NULL, PRIM_INT__n_s_d_s);
886
887
888 ostei_general_vrr_K(10, 0, 3, 0, 5,
889 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
890 PRIM_INT__n_s_d_s, PRIM_INT__n_s_p_s, NULL, PRIM_INT__m_s_d_s, NULL, PRIM_INT__n_s_f_s);
891
892
893 ostei_general_vrr_K(10, 0, 4, 0, 4,
894 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
895 PRIM_INT__n_s_f_s, PRIM_INT__n_s_d_s, NULL, PRIM_INT__m_s_f_s, NULL, PRIM_INT__n_s_g_s);
896
897
898 ostei_general_vrr_K(8, 0, 7, 0, 1,
899 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
900 PRIM_INT__l_s_i_s, PRIM_INT__l_s_h_s, NULL, PRIM_INT__k_s_i_s, NULL, PRIM_INT__l_s_k_s);
901
902
903 ostei_general_vrr_K(9, 0, 6, 0, 2,
904 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
905 PRIM_INT__m_s_h_s, PRIM_INT__m_s_g_s, NULL, PRIM_INT__l_s_h_s, NULL, PRIM_INT__m_s_i_s);
906
907
908 ostei_general_vrr_K(10, 0, 5, 0, 3,
909 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
910 PRIM_INT__n_s_g_s, PRIM_INT__n_s_f_s, NULL, PRIM_INT__m_s_g_s, NULL, PRIM_INT__n_s_h_s);
911
912
913 ostei_general_vrr1_I(11, 8,
914 one_over_2p, a_over_p, aop_PQ, P_PA,
915 PRIM_INT__n_s_s_s, PRIM_INT__m_s_s_s, PRIM_INT__o_s_s_s);
916
917
918 ostei_general_vrr_K(11, 0, 1, 0, 7,
919 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
920 PRIM_INT__o_s_s_s, NULL, NULL, PRIM_INT__n_s_s_s, NULL, PRIM_INT__o_s_p_s);
921
922
923 ostei_general_vrr_K(11, 0, 2, 0, 6,
924 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
925 PRIM_INT__o_s_p_s, PRIM_INT__o_s_s_s, NULL, PRIM_INT__n_s_p_s, NULL, PRIM_INT__o_s_d_s);
926
927
928 ostei_general_vrr_K(11, 0, 3, 0, 5,
929 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
930 PRIM_INT__o_s_d_s, PRIM_INT__o_s_p_s, NULL, PRIM_INT__n_s_d_s, NULL, PRIM_INT__o_s_f_s);
931
932
933 ostei_general_vrr_K(11, 0, 4, 0, 4,
934 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
935 PRIM_INT__o_s_f_s, PRIM_INT__o_s_d_s, NULL, PRIM_INT__n_s_f_s, NULL, PRIM_INT__o_s_g_s);
936
937
938 ostei_general_vrr_K(9, 0, 7, 0, 1,
939 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
940 PRIM_INT__m_s_i_s, PRIM_INT__m_s_h_s, NULL, PRIM_INT__l_s_i_s, NULL, PRIM_INT__m_s_k_s);
941
942
943 ostei_general_vrr_K(10, 0, 6, 0, 2,
944 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
945 PRIM_INT__n_s_h_s, PRIM_INT__n_s_g_s, NULL, PRIM_INT__m_s_h_s, NULL, PRIM_INT__n_s_i_s);
946
947
948 ostei_general_vrr_K(11, 0, 5, 0, 3,
949 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
950 PRIM_INT__o_s_g_s, PRIM_INT__o_s_f_s, NULL, PRIM_INT__n_s_g_s, NULL, PRIM_INT__o_s_h_s);
951
952
953 ostei_general_vrr_K(10, 0, 7, 0, 1,
954 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
955 PRIM_INT__n_s_i_s, PRIM_INT__n_s_h_s, NULL, PRIM_INT__m_s_i_s, NULL, PRIM_INT__n_s_k_s);
956
957
958 ostei_general_vrr_K(11, 0, 6, 0, 2,
959 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
960 PRIM_INT__o_s_h_s, PRIM_INT__o_s_g_s, NULL, PRIM_INT__n_s_h_s, NULL, PRIM_INT__o_s_i_s);
961
962
963 ostei_general_vrr_K(11, 0, 7, 0, 1,
964 one_over_2q, a_over_q, one_over_2pq, aoq_PQ, Q_PA,
965 PRIM_INT__o_s_i_s, PRIM_INT__o_s_h_s, NULL, PRIM_INT__n_s_i_s, NULL, PRIM_INT__o_s_k_s);
966
967
968
969
970 ////////////////////////////////////
971 // Accumulate contracted integrals
972 ////////////////////////////////////
973 if(lastoffset == 0)
974 {
975 contract_all(540, PRIM_INT__k_s_g_s, PRIM_PTR_INT__k_s_g_s);
976 contract_all(756, PRIM_INT__k_s_h_s, PRIM_PTR_INT__k_s_h_s);
977 contract_all(1008, PRIM_INT__k_s_i_s, PRIM_PTR_INT__k_s_i_s);
978 contract_all(1296, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
979 contract_all(675, PRIM_INT__l_s_g_s, PRIM_PTR_INT__l_s_g_s);
980 contract_all(945, PRIM_INT__l_s_h_s, PRIM_PTR_INT__l_s_h_s);
981 contract_all(1260, PRIM_INT__l_s_i_s, PRIM_PTR_INT__l_s_i_s);
982 contract_all(1620, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
983 contract_all(825, PRIM_INT__m_s_g_s, PRIM_PTR_INT__m_s_g_s);
984 contract_all(1155, PRIM_INT__m_s_h_s, PRIM_PTR_INT__m_s_h_s);
985 contract_all(1540, PRIM_INT__m_s_i_s, PRIM_PTR_INT__m_s_i_s);
986 contract_all(1980, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
987 contract_all(990, PRIM_INT__n_s_g_s, PRIM_PTR_INT__n_s_g_s);
988 contract_all(1386, PRIM_INT__n_s_h_s, PRIM_PTR_INT__n_s_h_s);
989 contract_all(1848, PRIM_INT__n_s_i_s, PRIM_PTR_INT__n_s_i_s);
990 contract_all(2376, PRIM_INT__n_s_k_s, PRIM_PTR_INT__n_s_k_s);
991 contract_all(1170, PRIM_INT__o_s_g_s, PRIM_PTR_INT__o_s_g_s);
992 contract_all(1638, PRIM_INT__o_s_h_s, PRIM_PTR_INT__o_s_h_s);
993 contract_all(2184, PRIM_INT__o_s_i_s, PRIM_PTR_INT__o_s_i_s);
994 contract_all(2808, PRIM_INT__o_s_k_s, PRIM_PTR_INT__o_s_k_s);
995 }
996 else
997 {
998 contract(540, shelloffsets, PRIM_INT__k_s_g_s, PRIM_PTR_INT__k_s_g_s);
999 contract(756, shelloffsets, PRIM_INT__k_s_h_s, PRIM_PTR_INT__k_s_h_s);
1000 contract(1008, shelloffsets, PRIM_INT__k_s_i_s, PRIM_PTR_INT__k_s_i_s);
1001 contract(1296, shelloffsets, PRIM_INT__k_s_k_s, PRIM_PTR_INT__k_s_k_s);
1002 contract(675, shelloffsets, PRIM_INT__l_s_g_s, PRIM_PTR_INT__l_s_g_s);
1003 contract(945, shelloffsets, PRIM_INT__l_s_h_s, PRIM_PTR_INT__l_s_h_s);
1004 contract(1260, shelloffsets, PRIM_INT__l_s_i_s, PRIM_PTR_INT__l_s_i_s);
1005 contract(1620, shelloffsets, PRIM_INT__l_s_k_s, PRIM_PTR_INT__l_s_k_s);
1006 contract(825, shelloffsets, PRIM_INT__m_s_g_s, PRIM_PTR_INT__m_s_g_s);
1007 contract(1155, shelloffsets, PRIM_INT__m_s_h_s, PRIM_PTR_INT__m_s_h_s);
1008 contract(1540, shelloffsets, PRIM_INT__m_s_i_s, PRIM_PTR_INT__m_s_i_s);
1009 contract(1980, shelloffsets, PRIM_INT__m_s_k_s, PRIM_PTR_INT__m_s_k_s);
1010 contract(990, shelloffsets, PRIM_INT__n_s_g_s, PRIM_PTR_INT__n_s_g_s);
1011 contract(1386, shelloffsets, PRIM_INT__n_s_h_s, PRIM_PTR_INT__n_s_h_s);
1012 contract(1848, shelloffsets, PRIM_INT__n_s_i_s, PRIM_PTR_INT__n_s_i_s);
1013 contract(2376, shelloffsets, PRIM_INT__n_s_k_s, PRIM_PTR_INT__n_s_k_s);
1014 contract(1170, shelloffsets, PRIM_INT__o_s_g_s, PRIM_PTR_INT__o_s_g_s);
1015 contract(1638, shelloffsets, PRIM_INT__o_s_h_s, PRIM_PTR_INT__o_s_h_s);
1016 contract(2184, shelloffsets, PRIM_INT__o_s_i_s, PRIM_PTR_INT__o_s_i_s);
1017 contract(2808, shelloffsets, PRIM_INT__o_s_k_s, PRIM_PTR_INT__o_s_k_s);
1018 PRIM_PTR_INT__k_s_g_s += lastoffset*540;
1019 PRIM_PTR_INT__k_s_h_s += lastoffset*756;
1020 PRIM_PTR_INT__k_s_i_s += lastoffset*1008;
1021 PRIM_PTR_INT__k_s_k_s += lastoffset*1296;
1022 PRIM_PTR_INT__l_s_g_s += lastoffset*675;
1023 PRIM_PTR_INT__l_s_h_s += lastoffset*945;
1024 PRIM_PTR_INT__l_s_i_s += lastoffset*1260;
1025 PRIM_PTR_INT__l_s_k_s += lastoffset*1620;
1026 PRIM_PTR_INT__m_s_g_s += lastoffset*825;
1027 PRIM_PTR_INT__m_s_h_s += lastoffset*1155;
1028 PRIM_PTR_INT__m_s_i_s += lastoffset*1540;
1029 PRIM_PTR_INT__m_s_k_s += lastoffset*1980;
1030 PRIM_PTR_INT__n_s_g_s += lastoffset*990;
1031 PRIM_PTR_INT__n_s_h_s += lastoffset*1386;
1032 PRIM_PTR_INT__n_s_i_s += lastoffset*1848;
1033 PRIM_PTR_INT__n_s_k_s += lastoffset*2376;
1034 PRIM_PTR_INT__o_s_g_s += lastoffset*1170;
1035 PRIM_PTR_INT__o_s_h_s += lastoffset*1638;
1036 PRIM_PTR_INT__o_s_i_s += lastoffset*2184;
1037 PRIM_PTR_INT__o_s_k_s += lastoffset*2808;
1038 }
1039
1040 } // close loop over j
1041 } // close loop over i
1042
1043 //Advance to the next batch
1044 jstart = SIMINT_SIMD_ROUND(jend);
1045
1046 //////////////////////////////////////////////
1047 // Contracted integrals: Horizontal recurrance
1048 //////////////////////////////////////////////
1049
1050
1051 const double hAB[3] = { P.AB_x[ab], P.AB_y[ab], P.AB_z[ab] };
1052
1053
1054 for(abcd = 0; abcd < nshellbatch; ++abcd, ++real_abcd)
1055 {
1056 const double hCD[3] = { Q.AB_x[cd+abcd], Q.AB_y[cd+abcd], Q.AB_z[cd+abcd] };
1057
1058 // set up HRR pointers
1059 double const * restrict HRR_INT__k_s_g_s = INT__k_s_g_s + abcd * 540;
1060 double const * restrict HRR_INT__k_s_h_s = INT__k_s_h_s + abcd * 756;
1061 double const * restrict HRR_INT__k_s_i_s = INT__k_s_i_s + abcd * 1008;
1062 double const * restrict HRR_INT__k_s_k_s = INT__k_s_k_s + abcd * 1296;
1063 double const * restrict HRR_INT__l_s_g_s = INT__l_s_g_s + abcd * 675;
1064 double const * restrict HRR_INT__l_s_h_s = INT__l_s_h_s + abcd * 945;
1065 double const * restrict HRR_INT__l_s_i_s = INT__l_s_i_s + abcd * 1260;
1066 double const * restrict HRR_INT__l_s_k_s = INT__l_s_k_s + abcd * 1620;
1067 double const * restrict HRR_INT__m_s_g_s = INT__m_s_g_s + abcd * 825;
1068 double const * restrict HRR_INT__m_s_h_s = INT__m_s_h_s + abcd * 1155;
1069 double const * restrict HRR_INT__m_s_i_s = INT__m_s_i_s + abcd * 1540;
1070 double const * restrict HRR_INT__m_s_k_s = INT__m_s_k_s + abcd * 1980;
1071 double const * restrict HRR_INT__n_s_g_s = INT__n_s_g_s + abcd * 990;
1072 double const * restrict HRR_INT__n_s_h_s = INT__n_s_h_s + abcd * 1386;
1073 double const * restrict HRR_INT__n_s_i_s = INT__n_s_i_s + abcd * 1848;
1074 double const * restrict HRR_INT__n_s_k_s = INT__n_s_k_s + abcd * 2376;
1075 double const * restrict HRR_INT__o_s_g_s = INT__o_s_g_s + abcd * 1170;
1076 double const * restrict HRR_INT__o_s_h_s = INT__o_s_h_s + abcd * 1638;
1077 double const * restrict HRR_INT__o_s_i_s = INT__o_s_i_s + abcd * 2184;
1078 double const * restrict HRR_INT__o_s_k_s = INT__o_s_k_s + abcd * 2808;
1079 double * restrict HRR_INT__k_g_g_f = INT__k_g_g_f + real_abcd * 81000;
1080
1081 // form INT__k_p_g_s
1082 ostei_general_hrr_J(7, 1, 4, 0, hAB, HRR_INT__l_s_g_s, HRR_INT__k_s_g_s, HRR_INT__k_p_g_s);
1083
1084 // form INT__k_p_h_s
1085 ostei_general_hrr_J(7, 1, 5, 0, hAB, HRR_INT__l_s_h_s, HRR_INT__k_s_h_s, HRR_INT__k_p_h_s);
1086
1087 // form INT__k_p_i_s
1088 ostei_general_hrr_J(7, 1, 6, 0, hAB, HRR_INT__l_s_i_s, HRR_INT__k_s_i_s, HRR_INT__k_p_i_s);
1089
1090 // form INT__k_p_k_s
1091 ostei_general_hrr_J(7, 1, 7, 0, hAB, HRR_INT__l_s_k_s, HRR_INT__k_s_k_s, HRR_INT__k_p_k_s);
1092
1093 // form INT__l_p_g_s
1094 ostei_general_hrr_J(8, 1, 4, 0, hAB, HRR_INT__m_s_g_s, HRR_INT__l_s_g_s, HRR_INT__l_p_g_s);
1095
1096 // form INT__l_p_h_s
1097 ostei_general_hrr_J(8, 1, 5, 0, hAB, HRR_INT__m_s_h_s, HRR_INT__l_s_h_s, HRR_INT__l_p_h_s);
1098
1099 // form INT__l_p_i_s
1100 ostei_general_hrr_J(8, 1, 6, 0, hAB, HRR_INT__m_s_i_s, HRR_INT__l_s_i_s, HRR_INT__l_p_i_s);
1101
1102 // form INT__l_p_k_s
1103 ostei_general_hrr_J(8, 1, 7, 0, hAB, HRR_INT__m_s_k_s, HRR_INT__l_s_k_s, HRR_INT__l_p_k_s);
1104
1105 // form INT__m_p_g_s
1106 ostei_general_hrr_J(9, 1, 4, 0, hAB, HRR_INT__n_s_g_s, HRR_INT__m_s_g_s, HRR_INT__m_p_g_s);
1107
1108 // form INT__m_p_h_s
1109 ostei_general_hrr_J(9, 1, 5, 0, hAB, HRR_INT__n_s_h_s, HRR_INT__m_s_h_s, HRR_INT__m_p_h_s);
1110
1111 // form INT__m_p_i_s
1112 ostei_general_hrr_J(9, 1, 6, 0, hAB, HRR_INT__n_s_i_s, HRR_INT__m_s_i_s, HRR_INT__m_p_i_s);
1113
1114 // form INT__m_p_k_s
1115 ostei_general_hrr_J(9, 1, 7, 0, hAB, HRR_INT__n_s_k_s, HRR_INT__m_s_k_s, HRR_INT__m_p_k_s);
1116
1117 // form INT__n_p_g_s
1118 ostei_general_hrr_J(10, 1, 4, 0, hAB, HRR_INT__o_s_g_s, HRR_INT__n_s_g_s, HRR_INT__n_p_g_s);
1119
1120 // form INT__n_p_h_s
1121 ostei_general_hrr_J(10, 1, 5, 0, hAB, HRR_INT__o_s_h_s, HRR_INT__n_s_h_s, HRR_INT__n_p_h_s);
1122
1123 // form INT__n_p_i_s
1124 ostei_general_hrr_J(10, 1, 6, 0, hAB, HRR_INT__o_s_i_s, HRR_INT__n_s_i_s, HRR_INT__n_p_i_s);
1125
1126 // form INT__n_p_k_s
1127 ostei_general_hrr_J(10, 1, 7, 0, hAB, HRR_INT__o_s_k_s, HRR_INT__n_s_k_s, HRR_INT__n_p_k_s);
1128
1129 // form INT__k_d_g_s
1130 ostei_general_hrr_J(7, 2, 4, 0, hAB, HRR_INT__l_p_g_s, HRR_INT__k_p_g_s, HRR_INT__k_d_g_s);
1131
1132 // form INT__k_d_h_s
1133 ostei_general_hrr_J(7, 2, 5, 0, hAB, HRR_INT__l_p_h_s, HRR_INT__k_p_h_s, HRR_INT__k_d_h_s);
1134
1135 // form INT__k_d_i_s
1136 ostei_general_hrr_J(7, 2, 6, 0, hAB, HRR_INT__l_p_i_s, HRR_INT__k_p_i_s, HRR_INT__k_d_i_s);
1137
1138 // form INT__k_d_k_s
1139 ostei_general_hrr_J(7, 2, 7, 0, hAB, HRR_INT__l_p_k_s, HRR_INT__k_p_k_s, HRR_INT__k_d_k_s);
1140
1141 // form INT__l_d_g_s
1142 ostei_general_hrr_J(8, 2, 4, 0, hAB, HRR_INT__m_p_g_s, HRR_INT__l_p_g_s, HRR_INT__l_d_g_s);
1143
1144 // form INT__l_d_h_s
1145 ostei_general_hrr_J(8, 2, 5, 0, hAB, HRR_INT__m_p_h_s, HRR_INT__l_p_h_s, HRR_INT__l_d_h_s);
1146
1147 // form INT__l_d_i_s
1148 ostei_general_hrr_J(8, 2, 6, 0, hAB, HRR_INT__m_p_i_s, HRR_INT__l_p_i_s, HRR_INT__l_d_i_s);
1149
1150 // form INT__l_d_k_s
1151 ostei_general_hrr_J(8, 2, 7, 0, hAB, HRR_INT__m_p_k_s, HRR_INT__l_p_k_s, HRR_INT__l_d_k_s);
1152
1153 // form INT__m_d_g_s
1154 ostei_general_hrr_J(9, 2, 4, 0, hAB, HRR_INT__n_p_g_s, HRR_INT__m_p_g_s, HRR_INT__m_d_g_s);
1155
1156 // form INT__m_d_h_s
1157 ostei_general_hrr_J(9, 2, 5, 0, hAB, HRR_INT__n_p_h_s, HRR_INT__m_p_h_s, HRR_INT__m_d_h_s);
1158
1159 // form INT__m_d_i_s
1160 ostei_general_hrr_J(9, 2, 6, 0, hAB, HRR_INT__n_p_i_s, HRR_INT__m_p_i_s, HRR_INT__m_d_i_s);
1161
1162 // form INT__m_d_k_s
1163 ostei_general_hrr_J(9, 2, 7, 0, hAB, HRR_INT__n_p_k_s, HRR_INT__m_p_k_s, HRR_INT__m_d_k_s);
1164
1165 // form INT__k_f_g_s
1166 ostei_general_hrr_J(7, 3, 4, 0, hAB, HRR_INT__l_d_g_s, HRR_INT__k_d_g_s, HRR_INT__k_f_g_s);
1167
1168 // form INT__k_f_h_s
1169 ostei_general_hrr_J(7, 3, 5, 0, hAB, HRR_INT__l_d_h_s, HRR_INT__k_d_h_s, HRR_INT__k_f_h_s);
1170
1171 // form INT__k_f_i_s
1172 ostei_general_hrr_J(7, 3, 6, 0, hAB, HRR_INT__l_d_i_s, HRR_INT__k_d_i_s, HRR_INT__k_f_i_s);
1173
1174 // form INT__k_f_k_s
1175 ostei_general_hrr_J(7, 3, 7, 0, hAB, HRR_INT__l_d_k_s, HRR_INT__k_d_k_s, HRR_INT__k_f_k_s);
1176
1177 // form INT__l_f_g_s
1178 ostei_general_hrr_J(8, 3, 4, 0, hAB, HRR_INT__m_d_g_s, HRR_INT__l_d_g_s, HRR_INT__l_f_g_s);
1179
1180 // form INT__l_f_h_s
1181 ostei_general_hrr_J(8, 3, 5, 0, hAB, HRR_INT__m_d_h_s, HRR_INT__l_d_h_s, HRR_INT__l_f_h_s);
1182
1183 // form INT__l_f_i_s
1184 ostei_general_hrr_J(8, 3, 6, 0, hAB, HRR_INT__m_d_i_s, HRR_INT__l_d_i_s, HRR_INT__l_f_i_s);
1185
1186 // form INT__l_f_k_s
1187 ostei_general_hrr_J(8, 3, 7, 0, hAB, HRR_INT__m_d_k_s, HRR_INT__l_d_k_s, HRR_INT__l_f_k_s);
1188
1189 // form INT__k_g_g_s
1190 ostei_general_hrr_J(7, 4, 4, 0, hAB, HRR_INT__l_f_g_s, HRR_INT__k_f_g_s, HRR_INT__k_g_g_s);
1191
1192 // form INT__k_g_h_s
1193 ostei_general_hrr_J(7, 4, 5, 0, hAB, HRR_INT__l_f_h_s, HRR_INT__k_f_h_s, HRR_INT__k_g_h_s);
1194
1195 // form INT__k_g_i_s
1196 ostei_general_hrr_J(7, 4, 6, 0, hAB, HRR_INT__l_f_i_s, HRR_INT__k_f_i_s, HRR_INT__k_g_i_s);
1197
1198 // form INT__k_g_k_s
1199 ostei_general_hrr_J(7, 4, 7, 0, hAB, HRR_INT__l_f_k_s, HRR_INT__k_f_k_s, HRR_INT__k_g_k_s);
1200
1201 // form INT__k_g_g_p
1202 HRR_L_g_p(
1203 HRR_INT__k_g_g_p,
1204 HRR_INT__k_g_g_s,
1205 HRR_INT__k_g_h_s,
1206 hCD, 540);
1207
1208 // form INT__k_g_h_p
1209 ostei_general_hrr_L(7, 4, 5, 1, hCD, HRR_INT__k_g_i_s, HRR_INT__k_g_h_s, HRR_INT__k_g_h_p);
1210
1211 // form INT__k_g_i_p
1212 ostei_general_hrr_L(7, 4, 6, 1, hCD, HRR_INT__k_g_k_s, HRR_INT__k_g_i_s, HRR_INT__k_g_i_p);
1213
1214 // form INT__k_g_g_d
1215 ostei_general_hrr_L(7, 4, 4, 2, hCD, HRR_INT__k_g_h_p, HRR_INT__k_g_g_p, HRR_INT__k_g_g_d);
1216
1217 // form INT__k_g_h_d
1218 ostei_general_hrr_L(7, 4, 5, 2, hCD, HRR_INT__k_g_i_p, HRR_INT__k_g_h_p, HRR_INT__k_g_h_d);
1219
1220 // form INT__k_g_g_f
1221 ostei_general_hrr_L(7, 4, 4, 3, hCD, HRR_INT__k_g_h_d, HRR_INT__k_g_g_d, HRR_INT__k_g_g_f);
1222
1223
1224 } // close HRR loop
1225
1226
1227 } // close loop cdbatch
1228
1229 istart = iend;
1230 } // close loop over ab
1231
1232 return P.nshell12_clip * Q.nshell12_clip;
1233 }
1234
ostei_g_k_g_f(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__g_k_g_f)1235 int ostei_g_k_g_f(struct simint_multi_shellpair const P,
1236 struct simint_multi_shellpair const Q,
1237 double screen_tol,
1238 double * const restrict work,
1239 double * const restrict INT__g_k_g_f)
1240 {
1241 double P_AB[3*P.nshell12];
1242 struct simint_multi_shellpair P_tmp = P;
1243 P_tmp.PA_x = P.PB_x; P_tmp.PA_y = P.PB_y; P_tmp.PA_z = P.PB_z;
1244 P_tmp.PB_x = P.PA_x; P_tmp.PB_y = P.PA_y; P_tmp.PB_z = P.PA_z;
1245 P_tmp.AB_x = P_AB;
1246 P_tmp.AB_y = P_AB + P.nshell12;
1247 P_tmp.AB_z = P_AB + 2*P.nshell12;
1248
1249 for(int i = 0; i < P.nshell12; i++)
1250 {
1251 P_tmp.AB_x[i] = -P.AB_x[i];
1252 P_tmp.AB_y[i] = -P.AB_y[i];
1253 P_tmp.AB_z[i] = -P.AB_z[i];
1254 }
1255
1256 int ret = ostei_k_g_g_f(P_tmp, Q, screen_tol, work, INT__g_k_g_f);
1257 double buffer[81000] SIMINT_ALIGN_ARRAY_DBL;
1258
1259 for(int q = 0; q < ret; q++)
1260 {
1261 int idx = 0;
1262 for(int a = 0; a < 15; ++a)
1263 for(int b = 0; b < 36; ++b)
1264 for(int c = 0; c < 15; ++c)
1265 for(int d = 0; d < 10; ++d)
1266 buffer[idx++] = INT__g_k_g_f[q*81000+b*2250+a*150+c*10+d];
1267
1268 memcpy(INT__g_k_g_f+q*81000, buffer, 81000*sizeof(double));
1269 }
1270
1271 return ret;
1272 }
1273
ostei_k_g_f_g(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__k_g_f_g)1274 int ostei_k_g_f_g(struct simint_multi_shellpair const P,
1275 struct simint_multi_shellpair const Q,
1276 double screen_tol,
1277 double * const restrict work,
1278 double * const restrict INT__k_g_f_g)
1279 {
1280 double Q_AB[3*Q.nshell12];
1281 struct simint_multi_shellpair Q_tmp = Q;
1282 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1283 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1284 Q_tmp.AB_x = Q_AB;
1285 Q_tmp.AB_y = Q_AB + Q.nshell12;
1286 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1287
1288 for(int i = 0; i < Q.nshell12; i++)
1289 {
1290 Q_tmp.AB_x[i] = -Q.AB_x[i];
1291 Q_tmp.AB_y[i] = -Q.AB_y[i];
1292 Q_tmp.AB_z[i] = -Q.AB_z[i];
1293 }
1294
1295 int ret = ostei_k_g_g_f(P, Q_tmp, screen_tol, work, INT__k_g_f_g);
1296 double buffer[81000] SIMINT_ALIGN_ARRAY_DBL;
1297
1298 for(int q = 0; q < ret; q++)
1299 {
1300 int idx = 0;
1301 for(int a = 0; a < 36; ++a)
1302 for(int b = 0; b < 15; ++b)
1303 for(int c = 0; c < 10; ++c)
1304 for(int d = 0; d < 15; ++d)
1305 buffer[idx++] = INT__k_g_f_g[q*81000+a*2250+b*150+d*10+c];
1306
1307 memcpy(INT__k_g_f_g+q*81000, buffer, 81000*sizeof(double));
1308 }
1309
1310 return ret;
1311 }
1312
ostei_g_k_f_g(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__g_k_f_g)1313 int ostei_g_k_f_g(struct simint_multi_shellpair const P,
1314 struct simint_multi_shellpair const Q,
1315 double screen_tol,
1316 double * const restrict work,
1317 double * const restrict INT__g_k_f_g)
1318 {
1319 double P_AB[3*P.nshell12];
1320 struct simint_multi_shellpair P_tmp = P;
1321 P_tmp.PA_x = P.PB_x; P_tmp.PA_y = P.PB_y; P_tmp.PA_z = P.PB_z;
1322 P_tmp.PB_x = P.PA_x; P_tmp.PB_y = P.PA_y; P_tmp.PB_z = P.PA_z;
1323 P_tmp.AB_x = P_AB;
1324 P_tmp.AB_y = P_AB + P.nshell12;
1325 P_tmp.AB_z = P_AB + 2*P.nshell12;
1326
1327 for(int i = 0; i < P.nshell12; i++)
1328 {
1329 P_tmp.AB_x[i] = -P.AB_x[i];
1330 P_tmp.AB_y[i] = -P.AB_y[i];
1331 P_tmp.AB_z[i] = -P.AB_z[i];
1332 }
1333
1334 double Q_AB[3*Q.nshell12];
1335 struct simint_multi_shellpair Q_tmp = Q;
1336 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1337 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1338 Q_tmp.AB_x = Q_AB;
1339 Q_tmp.AB_y = Q_AB + Q.nshell12;
1340 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1341
1342 for(int i = 0; i < Q.nshell12; i++)
1343 {
1344 Q_tmp.AB_x[i] = -Q.AB_x[i];
1345 Q_tmp.AB_y[i] = -Q.AB_y[i];
1346 Q_tmp.AB_z[i] = -Q.AB_z[i];
1347 }
1348
1349 int ret = ostei_k_g_g_f(P_tmp, Q_tmp, screen_tol, work, INT__g_k_f_g);
1350 double buffer[81000] SIMINT_ALIGN_ARRAY_DBL;
1351
1352 for(int q = 0; q < ret; q++)
1353 {
1354 int idx = 0;
1355 for(int a = 0; a < 15; ++a)
1356 for(int b = 0; b < 36; ++b)
1357 for(int c = 0; c < 10; ++c)
1358 for(int d = 0; d < 15; ++d)
1359 buffer[idx++] = INT__g_k_f_g[q*81000+b*2250+a*150+d*10+c];
1360
1361 memcpy(INT__g_k_f_g+q*81000, buffer, 81000*sizeof(double));
1362 }
1363
1364 return ret;
1365 }
1366
1367