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_p_k_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_p_k_h)8 int ostei_d_p_k_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_p_k_h)
13 {
14
15 SIMINT_ASSUME_ALIGN_DBL(work);
16 SIMINT_ASSUME_ALIGN_DBL(INT__d_p_k_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_k_s = work + (SIMINT_NSHELL_SIMD * 0);
30 double * const INT__d_s_l_s = work + (SIMINT_NSHELL_SIMD * 216);
31 double * const INT__d_s_m_s = work + (SIMINT_NSHELL_SIMD * 486);
32 double * const INT__d_s_n_s = work + (SIMINT_NSHELL_SIMD * 816);
33 double * const INT__d_s_o_s = work + (SIMINT_NSHELL_SIMD * 1212);
34 double * const INT__d_s_q_s = work + (SIMINT_NSHELL_SIMD * 1680);
35 double * const INT__f_s_k_s = work + (SIMINT_NSHELL_SIMD * 2226);
36 double * const INT__f_s_l_s = work + (SIMINT_NSHELL_SIMD * 2586);
37 double * const INT__f_s_m_s = work + (SIMINT_NSHELL_SIMD * 3036);
38 double * const INT__f_s_n_s = work + (SIMINT_NSHELL_SIMD * 3586);
39 double * const INT__f_s_o_s = work + (SIMINT_NSHELL_SIMD * 4246);
40 double * const INT__f_s_q_s = work + (SIMINT_NSHELL_SIMD * 5026);
41 SIMINT_DBLTYPE * const primwork = (SIMINT_DBLTYPE *)(work + SIMINT_NSHELL_SIMD*5936);
42 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_s_s = primwork + 0;
43 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_p_s = primwork + 16;
44 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_d_s = primwork + 61;
45 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_f_s = primwork + 145;
46 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_g_s = primwork + 275;
47 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_h_s = primwork + 455;
48 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_i_s = primwork + 686;
49 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_k_s = primwork + 966;
50 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_l_s = primwork + 1290;
51 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_m_s = primwork + 1650;
52 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_n_s = primwork + 2035;
53 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_o_s = primwork + 2431;
54 SIMINT_DBLTYPE * const restrict PRIM_INT__s_s_q_s = primwork + 2821;
55 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_h_s = primwork + 3185;
56 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_i_s = primwork + 3374;
57 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_k_s = primwork + 3626;
58 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_l_s = primwork + 3950;
59 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_m_s = primwork + 4355;
60 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_n_s = primwork + 4850;
61 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_o_s = primwork + 5444;
62 SIMINT_DBLTYPE * const restrict PRIM_INT__p_s_q_s = primwork + 6146;
63 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_i_s = primwork + 6965;
64 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_k_s = primwork + 7301;
65 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_l_s = primwork + 7733;
66 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_m_s = primwork + 8273;
67 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_n_s = primwork + 8933;
68 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_o_s = primwork + 9725;
69 SIMINT_DBLTYPE * const restrict PRIM_INT__d_s_q_s = primwork + 10661;
70 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_k_s = primwork + 11753;
71 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_l_s = primwork + 12113;
72 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_m_s = primwork + 12563;
73 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_n_s = primwork + 13113;
74 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_o_s = primwork + 13773;
75 SIMINT_DBLTYPE * const restrict PRIM_INT__f_s_q_s = primwork + 14553;
76 double * const hrrwork = (double *)(primwork + 15463);
77 double * const HRR_INT__d_p_k_s = hrrwork + 0;
78 double * const HRR_INT__d_p_k_p = hrrwork + 648;
79 double * const HRR_INT__d_p_k_d = hrrwork + 2592;
80 double * const HRR_INT__d_p_k_f = hrrwork + 6480;
81 double * const HRR_INT__d_p_k_g = hrrwork + 12960;
82 double * const HRR_INT__d_p_l_s = hrrwork + 22680;
83 double * const HRR_INT__d_p_l_p = hrrwork + 23490;
84 double * const HRR_INT__d_p_l_d = hrrwork + 25920;
85 double * const HRR_INT__d_p_l_f = hrrwork + 30780;
86 double * const HRR_INT__d_p_l_g = hrrwork + 38880;
87 double * const HRR_INT__d_p_m_s = hrrwork + 51030;
88 double * const HRR_INT__d_p_m_p = hrrwork + 52020;
89 double * const HRR_INT__d_p_m_d = hrrwork + 54990;
90 double * const HRR_INT__d_p_m_f = hrrwork + 60930;
91 double * const HRR_INT__d_p_n_s = hrrwork + 70830;
92 double * const HRR_INT__d_p_n_p = hrrwork + 72018;
93 double * const HRR_INT__d_p_n_d = hrrwork + 75582;
94 double * const HRR_INT__d_p_o_s = hrrwork + 82710;
95 double * const HRR_INT__d_p_o_p = hrrwork + 84114;
96 double * const HRR_INT__d_p_q_s = hrrwork + 88326;
97
98
99 // Create constants
100 const SIMINT_DBLTYPE const_1 = SIMINT_DBLSET1(1);
101 const SIMINT_DBLTYPE const_10 = SIMINT_DBLSET1(10);
102 const SIMINT_DBLTYPE const_11 = SIMINT_DBLSET1(11);
103 const SIMINT_DBLTYPE const_12 = SIMINT_DBLSET1(12);
104 const SIMINT_DBLTYPE const_2 = SIMINT_DBLSET1(2);
105 const SIMINT_DBLTYPE const_3 = SIMINT_DBLSET1(3);
106 const SIMINT_DBLTYPE const_4 = SIMINT_DBLSET1(4);
107 const SIMINT_DBLTYPE const_5 = SIMINT_DBLSET1(5);
108 const SIMINT_DBLTYPE const_6 = SIMINT_DBLSET1(6);
109 const SIMINT_DBLTYPE const_7 = SIMINT_DBLSET1(7);
110 const SIMINT_DBLTYPE const_8 = SIMINT_DBLSET1(8);
111 const SIMINT_DBLTYPE const_9 = SIMINT_DBLSET1(9);
112 const SIMINT_DBLTYPE one_half = SIMINT_DBLSET1(0.5);
113
114
115 ////////////////////////////////////////
116 // Loop over shells and primitives
117 ////////////////////////////////////////
118
119 real_abcd = 0;
120 istart = 0;
121 for(ab = 0; ab < P.nshell12_clip; ++ab)
122 {
123 const int iend = istart + P.nprim12[ab];
124
125 cd = 0;
126 jstart = 0;
127
128 for(cd = 0; cd < Q.nshell12_clip; cd += SIMINT_NSHELL_SIMD)
129 {
130 const int nshellbatch = ((cd + SIMINT_NSHELL_SIMD) > Q.nshell12_clip) ? Q.nshell12_clip - cd : SIMINT_NSHELL_SIMD;
131 int jend = jstart;
132 for(i = 0; i < nshellbatch; i++)
133 jend += Q.nprim12[cd+i];
134
135 // Clear the beginning of the workspace (where we are accumulating integrals)
136 memset(work, 0, SIMINT_NSHELL_SIMD * 5936 * sizeof(double));
137 abcd = 0;
138
139
140 for(i = istart; i < iend; ++i)
141 {
142 SIMINT_DBLTYPE bra_screen_max; // only used if check_screen
143
144 if(check_screen)
145 {
146 // Skip this whole thing if always insignificant
147 if((P.screen[i] * Q.screen_max) < screen_tol)
148 continue;
149 bra_screen_max = SIMINT_DBLSET1(P.screen[i]);
150 }
151
152 icd = 0;
153 iprimcd = 0;
154 nprim_icd = Q.nprim12[cd];
155 double * restrict PRIM_PTR_INT__d_s_k_s = INT__d_s_k_s + abcd * 216;
156 double * restrict PRIM_PTR_INT__d_s_l_s = INT__d_s_l_s + abcd * 270;
157 double * restrict PRIM_PTR_INT__d_s_m_s = INT__d_s_m_s + abcd * 330;
158 double * restrict PRIM_PTR_INT__d_s_n_s = INT__d_s_n_s + abcd * 396;
159 double * restrict PRIM_PTR_INT__d_s_o_s = INT__d_s_o_s + abcd * 468;
160 double * restrict PRIM_PTR_INT__d_s_q_s = INT__d_s_q_s + abcd * 546;
161 double * restrict PRIM_PTR_INT__f_s_k_s = INT__f_s_k_s + abcd * 360;
162 double * restrict PRIM_PTR_INT__f_s_l_s = INT__f_s_l_s + abcd * 450;
163 double * restrict PRIM_PTR_INT__f_s_m_s = INT__f_s_m_s + abcd * 550;
164 double * restrict PRIM_PTR_INT__f_s_n_s = INT__f_s_n_s + abcd * 660;
165 double * restrict PRIM_PTR_INT__f_s_o_s = INT__f_s_o_s + abcd * 780;
166 double * restrict PRIM_PTR_INT__f_s_q_s = INT__f_s_q_s + abcd * 910;
167
168
169
170 // Load these one per loop over i
171 const SIMINT_DBLTYPE P_alpha = SIMINT_DBLSET1(P.alpha[i]);
172 const SIMINT_DBLTYPE P_prefac = SIMINT_DBLSET1(P.prefac[i]);
173 const SIMINT_DBLTYPE Pxyz[3] = { SIMINT_DBLSET1(P.x[i]), SIMINT_DBLSET1(P.y[i]), SIMINT_DBLSET1(P.z[i]) };
174
175 const SIMINT_DBLTYPE P_PA[3] = { SIMINT_DBLSET1(P.PA_x[i]), SIMINT_DBLSET1(P.PA_y[i]), SIMINT_DBLSET1(P.PA_z[i]) };
176
177 for(j = jstart; j < jend; j += SIMINT_SIMD_LEN)
178 {
179 // calculate the shell offsets
180 // these are the offset from the shell pointed to by cd
181 // for each element
182 int shelloffsets[SIMINT_SIMD_LEN] = {0};
183 int lastoffset = 0;
184 const int nlane = ( ((j + SIMINT_SIMD_LEN) < jend) ? SIMINT_SIMD_LEN : (jend - j));
185
186 if((iprimcd + SIMINT_SIMD_LEN) >= nprim_icd)
187 {
188 // Handle if the first element of the vector is a new shell
189 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
190 {
191 nprim_icd += Q.nprim12[cd + (++icd)];
192 PRIM_PTR_INT__d_s_k_s += 216;
193 PRIM_PTR_INT__d_s_l_s += 270;
194 PRIM_PTR_INT__d_s_m_s += 330;
195 PRIM_PTR_INT__d_s_n_s += 396;
196 PRIM_PTR_INT__d_s_o_s += 468;
197 PRIM_PTR_INT__d_s_q_s += 546;
198 PRIM_PTR_INT__f_s_k_s += 360;
199 PRIM_PTR_INT__f_s_l_s += 450;
200 PRIM_PTR_INT__f_s_m_s += 550;
201 PRIM_PTR_INT__f_s_n_s += 660;
202 PRIM_PTR_INT__f_s_o_s += 780;
203 PRIM_PTR_INT__f_s_q_s += 910;
204 }
205 iprimcd++;
206 for(n = 1; n < SIMINT_SIMD_LEN; ++n)
207 {
208 if(iprimcd >= nprim_icd && ((icd+1) < nshellbatch))
209 {
210 shelloffsets[n] = shelloffsets[n-1] + 1;
211 lastoffset++;
212 nprim_icd += Q.nprim12[cd + (++icd)];
213 }
214 else
215 shelloffsets[n] = shelloffsets[n-1];
216 iprimcd++;
217 }
218 }
219 else
220 iprimcd += SIMINT_SIMD_LEN;
221
222 // Do we have to compute this vector (or has it been screened out)?
223 // (not_screened != 0 means we have to do this vector)
224 if(check_screen)
225 {
226 const double vmax = vector_max(SIMINT_MUL(bra_screen_max, SIMINT_DBLLOAD(Q.screen, j)));
227 if(vmax < screen_tol)
228 {
229 PRIM_PTR_INT__d_s_k_s += lastoffset*216;
230 PRIM_PTR_INT__d_s_l_s += lastoffset*270;
231 PRIM_PTR_INT__d_s_m_s += lastoffset*330;
232 PRIM_PTR_INT__d_s_n_s += lastoffset*396;
233 PRIM_PTR_INT__d_s_o_s += lastoffset*468;
234 PRIM_PTR_INT__d_s_q_s += lastoffset*546;
235 PRIM_PTR_INT__f_s_k_s += lastoffset*360;
236 PRIM_PTR_INT__f_s_l_s += lastoffset*450;
237 PRIM_PTR_INT__f_s_m_s += lastoffset*550;
238 PRIM_PTR_INT__f_s_n_s += lastoffset*660;
239 PRIM_PTR_INT__f_s_o_s += lastoffset*780;
240 PRIM_PTR_INT__f_s_q_s += lastoffset*910;
241 continue;
242 }
243 }
244
245 const SIMINT_DBLTYPE Q_alpha = SIMINT_DBLLOAD(Q.alpha, j);
246 const SIMINT_DBLTYPE PQalpha_mul = SIMINT_MUL(P_alpha, Q_alpha);
247 const SIMINT_DBLTYPE PQalpha_sum = SIMINT_ADD(P_alpha, Q_alpha);
248 const SIMINT_DBLTYPE one_over_PQalpha_sum = SIMINT_DIV(const_1, PQalpha_sum);
249
250
251 /* construct R2 = (Px - Qx)**2 + (Py - Qy)**2 + (Pz -Qz)**2 */
252 SIMINT_DBLTYPE PQ[3];
253 PQ[0] = SIMINT_SUB(Pxyz[0], SIMINT_DBLLOAD(Q.x, j));
254 PQ[1] = SIMINT_SUB(Pxyz[1], SIMINT_DBLLOAD(Q.y, j));
255 PQ[2] = SIMINT_SUB(Pxyz[2], SIMINT_DBLLOAD(Q.z, j));
256 SIMINT_DBLTYPE R2 = SIMINT_MUL(PQ[0], PQ[0]);
257 R2 = SIMINT_FMADD(PQ[1], PQ[1], R2);
258 R2 = SIMINT_FMADD(PQ[2], PQ[2], R2);
259
260 const SIMINT_DBLTYPE alpha = SIMINT_MUL(PQalpha_mul, one_over_PQalpha_sum); // alpha from MEST
261 const SIMINT_DBLTYPE one_over_p = SIMINT_DIV(const_1, P_alpha);
262 const SIMINT_DBLTYPE one_over_q = SIMINT_DIV(const_1, Q_alpha);
263 const SIMINT_DBLTYPE one_over_2p = SIMINT_MUL(one_half, one_over_p);
264 const SIMINT_DBLTYPE one_over_2q = SIMINT_MUL(one_half, one_over_q);
265 const SIMINT_DBLTYPE one_over_2pq = SIMINT_MUL(one_half, one_over_PQalpha_sum);
266 const SIMINT_DBLTYPE Q_PA[3] = { SIMINT_DBLLOAD(Q.PA_x, j), SIMINT_DBLLOAD(Q.PA_y, j), SIMINT_DBLLOAD(Q.PA_z, j) };
267
268 // NOTE: Minus sign!
269 const SIMINT_DBLTYPE a_over_p = SIMINT_MUL(SIMINT_NEG(alpha), one_over_p);
270 SIMINT_DBLTYPE aop_PQ[3];
271 aop_PQ[0] = SIMINT_MUL(a_over_p, PQ[0]);
272 aop_PQ[1] = SIMINT_MUL(a_over_p, PQ[1]);
273 aop_PQ[2] = SIMINT_MUL(a_over_p, PQ[2]);
274
275 SIMINT_DBLTYPE a_over_q = SIMINT_MUL(alpha, one_over_q);
276 SIMINT_DBLTYPE aoq_PQ[3];
277 aoq_PQ[0] = SIMINT_MUL(a_over_q, PQ[0]);
278 aoq_PQ[1] = SIMINT_MUL(a_over_q, PQ[1]);
279 aoq_PQ[2] = SIMINT_MUL(a_over_q, PQ[2]);
280 // Put a minus sign here so we don't have to in RR routines
281 a_over_q = SIMINT_NEG(a_over_q);
282
283
284 //////////////////////////////////////////////
285 // Fjt function section
286 // Maximum v value: 15
287 //////////////////////////////////////////////
288 // The parameter to the Fjt function
289 const SIMINT_DBLTYPE F_x = SIMINT_MUL(R2, alpha);
290
291
292 const SIMINT_DBLTYPE Q_prefac = mask_load(nlane, Q.prefac + j);
293
294
295 boys_F_split(PRIM_INT__s_s_s_s, F_x, 15);
296 SIMINT_DBLTYPE prefac = SIMINT_SQRT(one_over_PQalpha_sum);
297 prefac = SIMINT_MUL(SIMINT_MUL(P_prefac, Q_prefac), prefac);
298 for(n = 0; n <= 15; n++)
299 PRIM_INT__s_s_s_s[n] = SIMINT_MUL(PRIM_INT__s_s_s_s[n], prefac);
300
301 //////////////////////////////////////////////
302 // Primitive integrals: Vertical recurrance
303 //////////////////////////////////////////////
304
305 const SIMINT_DBLTYPE vrr_const_1_over_2p = one_over_2p;
306 const SIMINT_DBLTYPE vrr_const_2_over_2p = SIMINT_MUL(const_2, one_over_2p);
307 const SIMINT_DBLTYPE vrr_const_1_over_2q = one_over_2q;
308 const SIMINT_DBLTYPE vrr_const_2_over_2q = SIMINT_MUL(const_2, one_over_2q);
309 const SIMINT_DBLTYPE vrr_const_3_over_2q = SIMINT_MUL(const_3, one_over_2q);
310 const SIMINT_DBLTYPE vrr_const_4_over_2q = SIMINT_MUL(const_4, one_over_2q);
311 const SIMINT_DBLTYPE vrr_const_5_over_2q = SIMINT_MUL(const_5, one_over_2q);
312 const SIMINT_DBLTYPE vrr_const_6_over_2q = SIMINT_MUL(const_6, one_over_2q);
313 const SIMINT_DBLTYPE vrr_const_7_over_2q = SIMINT_MUL(const_7, one_over_2q);
314 const SIMINT_DBLTYPE vrr_const_8_over_2q = SIMINT_MUL(const_8, one_over_2q);
315 const SIMINT_DBLTYPE vrr_const_9_over_2q = SIMINT_MUL(const_9, one_over_2q);
316 const SIMINT_DBLTYPE vrr_const_10_over_2q = SIMINT_MUL(const_10, one_over_2q);
317 const SIMINT_DBLTYPE vrr_const_11_over_2q = SIMINT_MUL(const_11, one_over_2q);
318 const SIMINT_DBLTYPE vrr_const_1_over_2pq = one_over_2pq;
319 const SIMINT_DBLTYPE vrr_const_2_over_2pq = SIMINT_MUL(const_2, one_over_2pq);
320 const SIMINT_DBLTYPE vrr_const_3_over_2pq = SIMINT_MUL(const_3, one_over_2pq);
321 const SIMINT_DBLTYPE vrr_const_4_over_2pq = SIMINT_MUL(const_4, one_over_2pq);
322 const SIMINT_DBLTYPE vrr_const_5_over_2pq = SIMINT_MUL(const_5, one_over_2pq);
323 const SIMINT_DBLTYPE vrr_const_6_over_2pq = SIMINT_MUL(const_6, one_over_2pq);
324 const SIMINT_DBLTYPE vrr_const_7_over_2pq = SIMINT_MUL(const_7, one_over_2pq);
325 const SIMINT_DBLTYPE vrr_const_8_over_2pq = SIMINT_MUL(const_8, one_over_2pq);
326 const SIMINT_DBLTYPE vrr_const_9_over_2pq = SIMINT_MUL(const_9, one_over_2pq);
327 const SIMINT_DBLTYPE vrr_const_10_over_2pq = SIMINT_MUL(const_10, one_over_2pq);
328 const SIMINT_DBLTYPE vrr_const_11_over_2pq = SIMINT_MUL(const_11, one_over_2pq);
329 const SIMINT_DBLTYPE vrr_const_12_over_2pq = SIMINT_MUL(const_12, one_over_2pq);
330
331
332
333 // Forming PRIM_INT__s_s_p_s[15 * 3];
334 for(n = 0; n < 15; ++n) // loop over orders of auxiliary function
335 {
336
337 PRIM_INT__s_s_p_s[n * 3 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_s_s[n * 1 + 0]);
338 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]);
339
340 PRIM_INT__s_s_p_s[n * 3 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_s_s[n * 1 + 0]);
341 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]);
342
343 PRIM_INT__s_s_p_s[n * 3 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_s_s[n * 1 + 0]);
344 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]);
345
346 }
347
348
349
350 // Forming PRIM_INT__s_s_d_s[14 * 6];
351 for(n = 0; n < 14; ++n) // loop over orders of auxiliary function
352 {
353
354 PRIM_INT__s_s_d_s[n * 6 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_p_s[n * 3 + 0]);
355 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]);
356 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]);
357
358 PRIM_INT__s_s_d_s[n * 6 + 3] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_p_s[n * 3 + 1]);
359 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]);
360 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]);
361
362 PRIM_INT__s_s_d_s[n * 6 + 5] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_p_s[n * 3 + 2]);
363 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]);
364 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]);
365
366 }
367
368
369
370 // Forming PRIM_INT__s_s_f_s[13 * 10];
371 for(n = 0; n < 13; ++n) // loop over orders of auxiliary function
372 {
373
374 PRIM_INT__s_s_f_s[n * 10 + 0] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_d_s[n * 6 + 0]);
375 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]);
376 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]);
377
378 PRIM_INT__s_s_f_s[n * 10 + 1] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_d_s[n * 6 + 0]);
379 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]);
380
381 PRIM_INT__s_s_f_s[n * 10 + 2] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_d_s[n * 6 + 0]);
382 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]);
383
384 PRIM_INT__s_s_f_s[n * 10 + 3] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_d_s[n * 6 + 3]);
385 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]);
386
387 PRIM_INT__s_s_f_s[n * 10 + 5] = SIMINT_MUL(Q_PA[0], PRIM_INT__s_s_d_s[n * 6 + 5]);
388 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]);
389
390 PRIM_INT__s_s_f_s[n * 10 + 6] = SIMINT_MUL(Q_PA[1], PRIM_INT__s_s_d_s[n * 6 + 3]);
391 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]);
392 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]);
393
394 PRIM_INT__s_s_f_s[n * 10 + 7] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_d_s[n * 6 + 3]);
395 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]);
396
397 PRIM_INT__s_s_f_s[n * 10 + 9] = SIMINT_MUL(Q_PA[2], PRIM_INT__s_s_d_s[n * 6 + 5]);
398 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]);
399 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]);
400
401 }
402
403
404 VRR_K_s_s_g_s(
405 PRIM_INT__s_s_g_s,
406 PRIM_INT__s_s_f_s,
407 PRIM_INT__s_s_d_s,
408 Q_PA,
409 a_over_q,
410 aoq_PQ,
411 one_over_2q,
412 12);
413
414
415 VRR_K_s_s_h_s(
416 PRIM_INT__s_s_h_s,
417 PRIM_INT__s_s_g_s,
418 PRIM_INT__s_s_f_s,
419 Q_PA,
420 a_over_q,
421 aoq_PQ,
422 one_over_2q,
423 11);
424
425
426 ostei_general_vrr1_K(6, 10,
427 one_over_2q, a_over_q, aoq_PQ, Q_PA,
428 PRIM_INT__s_s_h_s, PRIM_INT__s_s_g_s, PRIM_INT__s_s_i_s);
429
430
431 ostei_general_vrr1_K(7, 9,
432 one_over_2q, a_over_q, aoq_PQ, Q_PA,
433 PRIM_INT__s_s_i_s, PRIM_INT__s_s_h_s, PRIM_INT__s_s_k_s);
434
435
436 ostei_general_vrr_I(1, 0, 7, 0, 3,
437 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
438 PRIM_INT__s_s_k_s, NULL, NULL, PRIM_INT__s_s_i_s, NULL, PRIM_INT__p_s_k_s);
439
440
441 ostei_general_vrr_I(1, 0, 6, 0, 3,
442 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
443 PRIM_INT__s_s_i_s, NULL, NULL, PRIM_INT__s_s_h_s, NULL, PRIM_INT__p_s_i_s);
444
445
446 ostei_general_vrr_I(2, 0, 7, 0, 2,
447 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
448 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);
449
450
451 ostei_general_vrr1_K(8, 8,
452 one_over_2q, a_over_q, aoq_PQ, Q_PA,
453 PRIM_INT__s_s_k_s, PRIM_INT__s_s_i_s, PRIM_INT__s_s_l_s);
454
455
456 ostei_general_vrr_I(1, 0, 8, 0, 3,
457 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
458 PRIM_INT__s_s_l_s, NULL, NULL, PRIM_INT__s_s_k_s, NULL, PRIM_INT__p_s_l_s);
459
460
461 ostei_general_vrr_I(2, 0, 8, 0, 2,
462 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
463 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);
464
465
466 ostei_general_vrr_I(1, 0, 5, 0, 3,
467 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
468 PRIM_INT__s_s_h_s, NULL, NULL, PRIM_INT__s_s_g_s, NULL, PRIM_INT__p_s_h_s);
469
470
471 ostei_general_vrr_I(2, 0, 6, 0, 2,
472 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
473 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);
474
475
476 ostei_general_vrr_I(3, 0, 7, 0, 1,
477 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
478 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);
479
480
481 ostei_general_vrr1_K(9, 7,
482 one_over_2q, a_over_q, aoq_PQ, Q_PA,
483 PRIM_INT__s_s_l_s, PRIM_INT__s_s_k_s, PRIM_INT__s_s_m_s);
484
485
486 ostei_general_vrr_I(1, 0, 9, 0, 3,
487 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
488 PRIM_INT__s_s_m_s, NULL, NULL, PRIM_INT__s_s_l_s, NULL, PRIM_INT__p_s_m_s);
489
490
491 ostei_general_vrr_I(2, 0, 9, 0, 2,
492 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
493 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);
494
495
496 ostei_general_vrr_I(3, 0, 8, 0, 1,
497 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
498 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);
499
500
501 ostei_general_vrr1_K(10, 6,
502 one_over_2q, a_over_q, aoq_PQ, Q_PA,
503 PRIM_INT__s_s_m_s, PRIM_INT__s_s_l_s, PRIM_INT__s_s_n_s);
504
505
506 ostei_general_vrr_I(1, 0, 10, 0, 3,
507 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
508 PRIM_INT__s_s_n_s, NULL, NULL, PRIM_INT__s_s_m_s, NULL, PRIM_INT__p_s_n_s);
509
510
511 ostei_general_vrr_I(2, 0, 10, 0, 2,
512 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
513 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);
514
515
516 ostei_general_vrr_I(3, 0, 9, 0, 1,
517 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
518 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);
519
520
521 ostei_general_vrr1_K(11, 5,
522 one_over_2q, a_over_q, aoq_PQ, Q_PA,
523 PRIM_INT__s_s_n_s, PRIM_INT__s_s_m_s, PRIM_INT__s_s_o_s);
524
525
526 ostei_general_vrr_I(1, 0, 11, 0, 3,
527 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
528 PRIM_INT__s_s_o_s, NULL, NULL, PRIM_INT__s_s_n_s, NULL, PRIM_INT__p_s_o_s);
529
530
531 ostei_general_vrr_I(2, 0, 11, 0, 2,
532 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
533 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);
534
535
536 ostei_general_vrr_I(3, 0, 10, 0, 1,
537 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
538 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);
539
540
541 ostei_general_vrr1_K(12, 4,
542 one_over_2q, a_over_q, aoq_PQ, Q_PA,
543 PRIM_INT__s_s_o_s, PRIM_INT__s_s_n_s, PRIM_INT__s_s_q_s);
544
545
546 ostei_general_vrr_I(1, 0, 12, 0, 3,
547 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
548 PRIM_INT__s_s_q_s, NULL, NULL, PRIM_INT__s_s_o_s, NULL, PRIM_INT__p_s_q_s);
549
550
551 ostei_general_vrr_I(2, 0, 12, 0, 2,
552 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
553 PRIM_INT__p_s_q_s, PRIM_INT__s_s_q_s, NULL, PRIM_INT__p_s_o_s, NULL, PRIM_INT__d_s_q_s);
554
555
556 ostei_general_vrr_I(3, 0, 11, 0, 1,
557 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
558 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);
559
560
561 ostei_general_vrr_I(3, 0, 12, 0, 1,
562 one_over_2p, a_over_p, one_over_2pq, aop_PQ, P_PA,
563 PRIM_INT__d_s_q_s, PRIM_INT__p_s_q_s, NULL, PRIM_INT__d_s_o_s, NULL, PRIM_INT__f_s_q_s);
564
565
566
567
568 ////////////////////////////////////
569 // Accumulate contracted integrals
570 ////////////////////////////////////
571 if(lastoffset == 0)
572 {
573 contract_all(216, PRIM_INT__d_s_k_s, PRIM_PTR_INT__d_s_k_s);
574 contract_all(270, PRIM_INT__d_s_l_s, PRIM_PTR_INT__d_s_l_s);
575 contract_all(330, PRIM_INT__d_s_m_s, PRIM_PTR_INT__d_s_m_s);
576 contract_all(396, PRIM_INT__d_s_n_s, PRIM_PTR_INT__d_s_n_s);
577 contract_all(468, PRIM_INT__d_s_o_s, PRIM_PTR_INT__d_s_o_s);
578 contract_all(546, PRIM_INT__d_s_q_s, PRIM_PTR_INT__d_s_q_s);
579 contract_all(360, PRIM_INT__f_s_k_s, PRIM_PTR_INT__f_s_k_s);
580 contract_all(450, PRIM_INT__f_s_l_s, PRIM_PTR_INT__f_s_l_s);
581 contract_all(550, PRIM_INT__f_s_m_s, PRIM_PTR_INT__f_s_m_s);
582 contract_all(660, PRIM_INT__f_s_n_s, PRIM_PTR_INT__f_s_n_s);
583 contract_all(780, PRIM_INT__f_s_o_s, PRIM_PTR_INT__f_s_o_s);
584 contract_all(910, PRIM_INT__f_s_q_s, PRIM_PTR_INT__f_s_q_s);
585 }
586 else
587 {
588 contract(216, shelloffsets, PRIM_INT__d_s_k_s, PRIM_PTR_INT__d_s_k_s);
589 contract(270, shelloffsets, PRIM_INT__d_s_l_s, PRIM_PTR_INT__d_s_l_s);
590 contract(330, shelloffsets, PRIM_INT__d_s_m_s, PRIM_PTR_INT__d_s_m_s);
591 contract(396, shelloffsets, PRIM_INT__d_s_n_s, PRIM_PTR_INT__d_s_n_s);
592 contract(468, shelloffsets, PRIM_INT__d_s_o_s, PRIM_PTR_INT__d_s_o_s);
593 contract(546, shelloffsets, PRIM_INT__d_s_q_s, PRIM_PTR_INT__d_s_q_s);
594 contract(360, shelloffsets, PRIM_INT__f_s_k_s, PRIM_PTR_INT__f_s_k_s);
595 contract(450, shelloffsets, PRIM_INT__f_s_l_s, PRIM_PTR_INT__f_s_l_s);
596 contract(550, shelloffsets, PRIM_INT__f_s_m_s, PRIM_PTR_INT__f_s_m_s);
597 contract(660, shelloffsets, PRIM_INT__f_s_n_s, PRIM_PTR_INT__f_s_n_s);
598 contract(780, shelloffsets, PRIM_INT__f_s_o_s, PRIM_PTR_INT__f_s_o_s);
599 contract(910, shelloffsets, PRIM_INT__f_s_q_s, PRIM_PTR_INT__f_s_q_s);
600 PRIM_PTR_INT__d_s_k_s += lastoffset*216;
601 PRIM_PTR_INT__d_s_l_s += lastoffset*270;
602 PRIM_PTR_INT__d_s_m_s += lastoffset*330;
603 PRIM_PTR_INT__d_s_n_s += lastoffset*396;
604 PRIM_PTR_INT__d_s_o_s += lastoffset*468;
605 PRIM_PTR_INT__d_s_q_s += lastoffset*546;
606 PRIM_PTR_INT__f_s_k_s += lastoffset*360;
607 PRIM_PTR_INT__f_s_l_s += lastoffset*450;
608 PRIM_PTR_INT__f_s_m_s += lastoffset*550;
609 PRIM_PTR_INT__f_s_n_s += lastoffset*660;
610 PRIM_PTR_INT__f_s_o_s += lastoffset*780;
611 PRIM_PTR_INT__f_s_q_s += lastoffset*910;
612 }
613
614 } // close loop over j
615 } // close loop over i
616
617 //Advance to the next batch
618 jstart = SIMINT_SIMD_ROUND(jend);
619
620 //////////////////////////////////////////////
621 // Contracted integrals: Horizontal recurrance
622 //////////////////////////////////////////////
623
624
625 const double hAB[3] = { P.AB_x[ab], P.AB_y[ab], P.AB_z[ab] };
626
627
628 for(abcd = 0; abcd < nshellbatch; ++abcd, ++real_abcd)
629 {
630 const double hCD[3] = { Q.AB_x[cd+abcd], Q.AB_y[cd+abcd], Q.AB_z[cd+abcd] };
631
632 // set up HRR pointers
633 double const * restrict HRR_INT__d_s_k_s = INT__d_s_k_s + abcd * 216;
634 double const * restrict HRR_INT__d_s_l_s = INT__d_s_l_s + abcd * 270;
635 double const * restrict HRR_INT__d_s_m_s = INT__d_s_m_s + abcd * 330;
636 double const * restrict HRR_INT__d_s_n_s = INT__d_s_n_s + abcd * 396;
637 double const * restrict HRR_INT__d_s_o_s = INT__d_s_o_s + abcd * 468;
638 double const * restrict HRR_INT__d_s_q_s = INT__d_s_q_s + abcd * 546;
639 double const * restrict HRR_INT__f_s_k_s = INT__f_s_k_s + abcd * 360;
640 double const * restrict HRR_INT__f_s_l_s = INT__f_s_l_s + abcd * 450;
641 double const * restrict HRR_INT__f_s_m_s = INT__f_s_m_s + abcd * 550;
642 double const * restrict HRR_INT__f_s_n_s = INT__f_s_n_s + abcd * 660;
643 double const * restrict HRR_INT__f_s_o_s = INT__f_s_o_s + abcd * 780;
644 double const * restrict HRR_INT__f_s_q_s = INT__f_s_q_s + abcd * 910;
645 double * restrict HRR_INT__d_p_k_h = INT__d_p_k_h + real_abcd * 13608;
646
647 // form INT__d_p_k_s
648 for(iket = 0; iket < 36; ++iket)
649 {
650 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] );
651
652 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] );
653
654 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] );
655
656 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] );
657
658 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] );
659
660 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] );
661
662 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] );
663
664 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] );
665
666 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] );
667
668 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] );
669
670 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] );
671
672 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] );
673
674 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] );
675
676 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] );
677
678 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] );
679
680 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] );
681
682 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] );
683
684 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] );
685
686 }
687
688
689 // form INT__d_p_l_s
690 for(iket = 0; iket < 45; ++iket)
691 {
692 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] );
693
694 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] );
695
696 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] );
697
698 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] );
699
700 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] );
701
702 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] );
703
704 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] );
705
706 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] );
707
708 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] );
709
710 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] );
711
712 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] );
713
714 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] );
715
716 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] );
717
718 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] );
719
720 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] );
721
722 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] );
723
724 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] );
725
726 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] );
727
728 }
729
730
731 // form INT__d_p_m_s
732 for(iket = 0; iket < 55; ++iket)
733 {
734 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] );
735
736 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] );
737
738 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] );
739
740 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] );
741
742 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] );
743
744 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] );
745
746 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] );
747
748 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] );
749
750 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] );
751
752 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] );
753
754 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] );
755
756 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] );
757
758 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] );
759
760 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] );
761
762 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] );
763
764 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] );
765
766 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] );
767
768 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] );
769
770 }
771
772
773 // form INT__d_p_n_s
774 for(iket = 0; iket < 66; ++iket)
775 {
776 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] );
777
778 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] );
779
780 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] );
781
782 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] );
783
784 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] );
785
786 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] );
787
788 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] );
789
790 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] );
791
792 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] );
793
794 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] );
795
796 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] );
797
798 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] );
799
800 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] );
801
802 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] );
803
804 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] );
805
806 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] );
807
808 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] );
809
810 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] );
811
812 }
813
814
815 // form INT__d_p_o_s
816 for(iket = 0; iket < 78; ++iket)
817 {
818 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] );
819
820 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] );
821
822 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] );
823
824 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] );
825
826 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] );
827
828 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] );
829
830 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] );
831
832 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] );
833
834 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] );
835
836 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] );
837
838 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] );
839
840 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] );
841
842 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] );
843
844 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] );
845
846 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] );
847
848 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] );
849
850 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] );
851
852 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] );
853
854 }
855
856
857 // form INT__d_p_q_s
858 for(iket = 0; iket < 91; ++iket)
859 {
860 HRR_INT__d_p_q_s[0 * 91 + iket] = HRR_INT__f_s_q_s[0 * 91 + iket] + ( hAB[0] * HRR_INT__d_s_q_s[0 * 91 + iket] );
861
862 HRR_INT__d_p_q_s[1 * 91 + iket] = HRR_INT__f_s_q_s[1 * 91 + iket] + ( hAB[1] * HRR_INT__d_s_q_s[0 * 91 + iket] );
863
864 HRR_INT__d_p_q_s[2 * 91 + iket] = HRR_INT__f_s_q_s[2 * 91 + iket] + ( hAB[2] * HRR_INT__d_s_q_s[0 * 91 + iket] );
865
866 HRR_INT__d_p_q_s[3 * 91 + iket] = HRR_INT__f_s_q_s[1 * 91 + iket] + ( hAB[0] * HRR_INT__d_s_q_s[1 * 91 + iket] );
867
868 HRR_INT__d_p_q_s[4 * 91 + iket] = HRR_INT__f_s_q_s[3 * 91 + iket] + ( hAB[1] * HRR_INT__d_s_q_s[1 * 91 + iket] );
869
870 HRR_INT__d_p_q_s[5 * 91 + iket] = HRR_INT__f_s_q_s[4 * 91 + iket] + ( hAB[2] * HRR_INT__d_s_q_s[1 * 91 + iket] );
871
872 HRR_INT__d_p_q_s[6 * 91 + iket] = HRR_INT__f_s_q_s[2 * 91 + iket] + ( hAB[0] * HRR_INT__d_s_q_s[2 * 91 + iket] );
873
874 HRR_INT__d_p_q_s[7 * 91 + iket] = HRR_INT__f_s_q_s[4 * 91 + iket] + ( hAB[1] * HRR_INT__d_s_q_s[2 * 91 + iket] );
875
876 HRR_INT__d_p_q_s[8 * 91 + iket] = HRR_INT__f_s_q_s[5 * 91 + iket] + ( hAB[2] * HRR_INT__d_s_q_s[2 * 91 + iket] );
877
878 HRR_INT__d_p_q_s[9 * 91 + iket] = HRR_INT__f_s_q_s[3 * 91 + iket] + ( hAB[0] * HRR_INT__d_s_q_s[3 * 91 + iket] );
879
880 HRR_INT__d_p_q_s[10 * 91 + iket] = HRR_INT__f_s_q_s[6 * 91 + iket] + ( hAB[1] * HRR_INT__d_s_q_s[3 * 91 + iket] );
881
882 HRR_INT__d_p_q_s[11 * 91 + iket] = HRR_INT__f_s_q_s[7 * 91 + iket] + ( hAB[2] * HRR_INT__d_s_q_s[3 * 91 + iket] );
883
884 HRR_INT__d_p_q_s[12 * 91 + iket] = HRR_INT__f_s_q_s[4 * 91 + iket] + ( hAB[0] * HRR_INT__d_s_q_s[4 * 91 + iket] );
885
886 HRR_INT__d_p_q_s[13 * 91 + iket] = HRR_INT__f_s_q_s[7 * 91 + iket] + ( hAB[1] * HRR_INT__d_s_q_s[4 * 91 + iket] );
887
888 HRR_INT__d_p_q_s[14 * 91 + iket] = HRR_INT__f_s_q_s[8 * 91 + iket] + ( hAB[2] * HRR_INT__d_s_q_s[4 * 91 + iket] );
889
890 HRR_INT__d_p_q_s[15 * 91 + iket] = HRR_INT__f_s_q_s[5 * 91 + iket] + ( hAB[0] * HRR_INT__d_s_q_s[5 * 91 + iket] );
891
892 HRR_INT__d_p_q_s[16 * 91 + iket] = HRR_INT__f_s_q_s[8 * 91 + iket] + ( hAB[1] * HRR_INT__d_s_q_s[5 * 91 + iket] );
893
894 HRR_INT__d_p_q_s[17 * 91 + iket] = HRR_INT__f_s_q_s[9 * 91 + iket] + ( hAB[2] * HRR_INT__d_s_q_s[5 * 91 + iket] );
895
896 }
897
898
899 // form INT__d_p_k_p
900 ostei_general_hrr_L(2, 1, 7, 1, hCD, HRR_INT__d_p_l_s, HRR_INT__d_p_k_s, HRR_INT__d_p_k_p);
901
902 // form INT__d_p_l_p
903 ostei_general_hrr_L(2, 1, 8, 1, hCD, HRR_INT__d_p_m_s, HRR_INT__d_p_l_s, HRR_INT__d_p_l_p);
904
905 // form INT__d_p_m_p
906 ostei_general_hrr_L(2, 1, 9, 1, hCD, HRR_INT__d_p_n_s, HRR_INT__d_p_m_s, HRR_INT__d_p_m_p);
907
908 // form INT__d_p_n_p
909 ostei_general_hrr_L(2, 1, 10, 1, hCD, HRR_INT__d_p_o_s, HRR_INT__d_p_n_s, HRR_INT__d_p_n_p);
910
911 // form INT__d_p_o_p
912 ostei_general_hrr_L(2, 1, 11, 1, hCD, HRR_INT__d_p_q_s, HRR_INT__d_p_o_s, HRR_INT__d_p_o_p);
913
914 // form INT__d_p_k_d
915 ostei_general_hrr_L(2, 1, 7, 2, hCD, HRR_INT__d_p_l_p, HRR_INT__d_p_k_p, HRR_INT__d_p_k_d);
916
917 // form INT__d_p_l_d
918 ostei_general_hrr_L(2, 1, 8, 2, hCD, HRR_INT__d_p_m_p, HRR_INT__d_p_l_p, HRR_INT__d_p_l_d);
919
920 // form INT__d_p_m_d
921 ostei_general_hrr_L(2, 1, 9, 2, hCD, HRR_INT__d_p_n_p, HRR_INT__d_p_m_p, HRR_INT__d_p_m_d);
922
923 // form INT__d_p_n_d
924 ostei_general_hrr_L(2, 1, 10, 2, hCD, HRR_INT__d_p_o_p, HRR_INT__d_p_n_p, HRR_INT__d_p_n_d);
925
926 // form INT__d_p_k_f
927 ostei_general_hrr_L(2, 1, 7, 3, hCD, HRR_INT__d_p_l_d, HRR_INT__d_p_k_d, HRR_INT__d_p_k_f);
928
929 // form INT__d_p_l_f
930 ostei_general_hrr_L(2, 1, 8, 3, hCD, HRR_INT__d_p_m_d, HRR_INT__d_p_l_d, HRR_INT__d_p_l_f);
931
932 // form INT__d_p_m_f
933 ostei_general_hrr_L(2, 1, 9, 3, hCD, HRR_INT__d_p_n_d, HRR_INT__d_p_m_d, HRR_INT__d_p_m_f);
934
935 // form INT__d_p_k_g
936 ostei_general_hrr_L(2, 1, 7, 4, hCD, HRR_INT__d_p_l_f, HRR_INT__d_p_k_f, HRR_INT__d_p_k_g);
937
938 // form INT__d_p_l_g
939 ostei_general_hrr_L(2, 1, 8, 4, hCD, HRR_INT__d_p_m_f, HRR_INT__d_p_l_f, HRR_INT__d_p_l_g);
940
941 // form INT__d_p_k_h
942 ostei_general_hrr_L(2, 1, 7, 5, hCD, HRR_INT__d_p_l_g, HRR_INT__d_p_k_g, HRR_INT__d_p_k_h);
943
944
945 } // close HRR loop
946
947
948 } // close loop cdbatch
949
950 istart = iend;
951 } // close loop over ab
952
953 return P.nshell12_clip * Q.nshell12_clip;
954 }
955
ostei_p_d_k_h(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__p_d_k_h)956 int ostei_p_d_k_h(struct simint_multi_shellpair const P,
957 struct simint_multi_shellpair const Q,
958 double screen_tol,
959 double * const restrict work,
960 double * const restrict INT__p_d_k_h)
961 {
962 double P_AB[3*P.nshell12];
963 struct simint_multi_shellpair P_tmp = P;
964 P_tmp.PA_x = P.PB_x; P_tmp.PA_y = P.PB_y; P_tmp.PA_z = P.PB_z;
965 P_tmp.PB_x = P.PA_x; P_tmp.PB_y = P.PA_y; P_tmp.PB_z = P.PA_z;
966 P_tmp.AB_x = P_AB;
967 P_tmp.AB_y = P_AB + P.nshell12;
968 P_tmp.AB_z = P_AB + 2*P.nshell12;
969
970 for(int i = 0; i < P.nshell12; i++)
971 {
972 P_tmp.AB_x[i] = -P.AB_x[i];
973 P_tmp.AB_y[i] = -P.AB_y[i];
974 P_tmp.AB_z[i] = -P.AB_z[i];
975 }
976
977 int ret = ostei_d_p_k_h(P_tmp, Q, screen_tol, work, INT__p_d_k_h);
978 double buffer[13608] SIMINT_ALIGN_ARRAY_DBL;
979
980 for(int q = 0; q < ret; q++)
981 {
982 int idx = 0;
983 for(int a = 0; a < 3; ++a)
984 for(int b = 0; b < 6; ++b)
985 for(int c = 0; c < 36; ++c)
986 for(int d = 0; d < 21; ++d)
987 buffer[idx++] = INT__p_d_k_h[q*13608+b*2268+a*756+c*21+d];
988
989 memcpy(INT__p_d_k_h+q*13608, buffer, 13608*sizeof(double));
990 }
991
992 return ret;
993 }
994
ostei_d_p_h_k(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__d_p_h_k)995 int ostei_d_p_h_k(struct simint_multi_shellpair const P,
996 struct simint_multi_shellpair const Q,
997 double screen_tol,
998 double * const restrict work,
999 double * const restrict INT__d_p_h_k)
1000 {
1001 double Q_AB[3*Q.nshell12];
1002 struct simint_multi_shellpair Q_tmp = Q;
1003 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1004 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1005 Q_tmp.AB_x = Q_AB;
1006 Q_tmp.AB_y = Q_AB + Q.nshell12;
1007 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1008
1009 for(int i = 0; i < Q.nshell12; i++)
1010 {
1011 Q_tmp.AB_x[i] = -Q.AB_x[i];
1012 Q_tmp.AB_y[i] = -Q.AB_y[i];
1013 Q_tmp.AB_z[i] = -Q.AB_z[i];
1014 }
1015
1016 int ret = ostei_d_p_k_h(P, Q_tmp, screen_tol, work, INT__d_p_h_k);
1017 double buffer[13608] SIMINT_ALIGN_ARRAY_DBL;
1018
1019 for(int q = 0; q < ret; q++)
1020 {
1021 int idx = 0;
1022 for(int a = 0; a < 6; ++a)
1023 for(int b = 0; b < 3; ++b)
1024 for(int c = 0; c < 21; ++c)
1025 for(int d = 0; d < 36; ++d)
1026 buffer[idx++] = INT__d_p_h_k[q*13608+a*2268+b*756+d*21+c];
1027
1028 memcpy(INT__d_p_h_k+q*13608, buffer, 13608*sizeof(double));
1029 }
1030
1031 return ret;
1032 }
1033
ostei_p_d_h_k(struct simint_multi_shellpair const P,struct simint_multi_shellpair const Q,double screen_tol,double * const restrict work,double * const restrict INT__p_d_h_k)1034 int ostei_p_d_h_k(struct simint_multi_shellpair const P,
1035 struct simint_multi_shellpair const Q,
1036 double screen_tol,
1037 double * const restrict work,
1038 double * const restrict INT__p_d_h_k)
1039 {
1040 double P_AB[3*P.nshell12];
1041 struct simint_multi_shellpair P_tmp = P;
1042 P_tmp.PA_x = P.PB_x; P_tmp.PA_y = P.PB_y; P_tmp.PA_z = P.PB_z;
1043 P_tmp.PB_x = P.PA_x; P_tmp.PB_y = P.PA_y; P_tmp.PB_z = P.PA_z;
1044 P_tmp.AB_x = P_AB;
1045 P_tmp.AB_y = P_AB + P.nshell12;
1046 P_tmp.AB_z = P_AB + 2*P.nshell12;
1047
1048 for(int i = 0; i < P.nshell12; i++)
1049 {
1050 P_tmp.AB_x[i] = -P.AB_x[i];
1051 P_tmp.AB_y[i] = -P.AB_y[i];
1052 P_tmp.AB_z[i] = -P.AB_z[i];
1053 }
1054
1055 double Q_AB[3*Q.nshell12];
1056 struct simint_multi_shellpair Q_tmp = Q;
1057 Q_tmp.PA_x = Q.PB_x; Q_tmp.PA_y = Q.PB_y; Q_tmp.PA_z = Q.PB_z;
1058 Q_tmp.PB_x = Q.PA_x; Q_tmp.PB_y = Q.PA_y; Q_tmp.PB_z = Q.PA_z;
1059 Q_tmp.AB_x = Q_AB;
1060 Q_tmp.AB_y = Q_AB + Q.nshell12;
1061 Q_tmp.AB_z = Q_AB + 2*Q.nshell12;
1062
1063 for(int i = 0; i < Q.nshell12; i++)
1064 {
1065 Q_tmp.AB_x[i] = -Q.AB_x[i];
1066 Q_tmp.AB_y[i] = -Q.AB_y[i];
1067 Q_tmp.AB_z[i] = -Q.AB_z[i];
1068 }
1069
1070 int ret = ostei_d_p_k_h(P_tmp, Q_tmp, screen_tol, work, INT__p_d_h_k);
1071 double buffer[13608] SIMINT_ALIGN_ARRAY_DBL;
1072
1073 for(int q = 0; q < ret; q++)
1074 {
1075 int idx = 0;
1076 for(int a = 0; a < 3; ++a)
1077 for(int b = 0; b < 6; ++b)
1078 for(int c = 0; c < 21; ++c)
1079 for(int d = 0; d < 36; ++d)
1080 buffer[idx++] = INT__p_d_h_k[q*13608+b*2268+a*756+d*21+c];
1081
1082 memcpy(INT__p_d_h_k+q*13608, buffer, 13608*sizeof(double));
1083 }
1084
1085 return ret;
1086 }
1087
1088